C/C++教程

typeScript学习(一)

本文主要是介绍typeScript学习(一),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

基础类型 null undefined symbol boolean void

const count: number = 123;
const teacher: string = "zhen";

对象类型 

//对象类型
// 对象
const teacher: { name: string; age: number } = { name: 'zhen', age: 18 }
// 数组
const numbers: number[] = [1, 2, 3]
// 类
class Person {}
const zhen: Person = new Person() //翻译一下就是zhen必须是Person类对应的对象
// 函数 (() => number 翻译getTotal是个函数,返回数字类型)
const getTotal: () => number = () => {
  return 123
}

对象类型之函数相关类型

// 函数相关类型
// 函数 (() => number 翻译getTotal是个函数,返回数字类型)
const getTotal: () => number = () => {
  return 123
}
function add1(first: number, second: number): number {
  return first + second
}
add1(1, 1)

//函数返回值为空(void)的类型
function sayHello(): void {
  console.log("Hello")
}
// 函数为never的例子(不会执行完就可以用never类型)
// function errorEmitter(): never {
//   while (true) {}
// }
function errorEmitter(): never {
  throw new Error("错误调用never")
  console.log(111)
}
// Es6解构函数
function add({ first, second }: { first: number; second: number }): number {
  return first + second
}
const total = add({ first: 1, second: 2 })

基础复习

// 箭头函数两种写法
const fun = (str: string): number => {
  return parseInt(str, 10)
}
console.log(fun("10"))
const fun1: (str: string) => number = (str) => {
  return parseInt(str, 10)
}
console.log(fun("10"))
//对于JSON这些方法,用下面这种case
interface Person {
  name: string
}
const rawData = '{"name":"zhen"}'
const newDate: Person = JSON.parse(rawData)

//对于一个变量有两种值 可以用例如number | string的方式
let aa: string | number = "123"
aa = 123

 数组和元组

// 数组和元组
// 数组
const arr: (number | string)[] = ["1", 1, "2"]
const stringArr: string[] = ["1", "2"]
const undefinedArr: undefined[] = [undefined]
// type alias 类型别名
type User = { name: string; age: number }
const userArr: User[] = [
  {
    name: "zhen",
    age: 18,
  },
]
// class ts也认为可以充当类型别名的作用
class Teacher {
  name: string
  age: 18
}
const teacherArr: Teacher[] = [
  new Teacher(),
  {
    name: "zhen",
    age: 18,
  },
]
// 元组tuple,具体到每个参数的类型
const teacherInfo: [string, string, number] = ["zhen", "xuan", 18]
const teacherList: [string, string, number][] = [["zhen", "xuan", 18]]

interface接口

常见面试题:interface和type有什么区别?

interface只能定义一些对象类型,函数等,但type可以定义一些基础类型。

只有不能用interface的时候,才有type来表示

 例如:type Person = string  interface Person { name:string }   

// interface和type 相似,但不完全相似,type可以定义一些基础类型
interface Person {
  // readonly name: string; 只读
  name: string
  age?: number //可选
  [propName: string]: any // 接受string类型,返回any类型
  say(): string
}
// 继承
interface Teacher extends Person {
  teach(): string
}
const getPersonName = (person: Person): void => {
  console.log(person.name)
}
const setPersonName = (person: Teacher, name: string): void => {
  person.name = name
}

const person = {
  name: "zhen",
  say() {
    return "say hello"
  },
  teach() {
    return "teach"
  },
}
getPersonName(person)
setPersonName(person, "zhen2")
// 函数的类型
interface SayHi {
  (word: string): string //函数接受word参数的类型是string,返回string
}
const SayHi: SayHi = (word: string) => {
  return word
}

类中的访问类型和构造器

// private,protected,public 访问类型
// public 公共 允许我在类的内外被调用
// private 只允许在类内被使用
// protected 允许在类中继承子类的使用
class Person {
  protected name: string = "dell"
  public sayHi() {
    console.log(this.name)
  }
}
class Teacher extends Person {
  public sayName() {
    console.log(this.name)
  }
}
const person = new Person()
person.name = "zhen"  // protected访问不到。只有public访问得到
person.sayHi()
 //constructor
// //constructor
class Person {
  // 传统写法
  public name: string
  constructor(name: string) {
    this.name = name
  }
  //传统写法等同于下面的简化写法
  constructor(public name: string) {
    this.name = name
  }
}
const person = new Person("zhen") //constructor的执行时间是在new Person()这一瞬间开始执行的
console.log(person.name)

  

// class Person {
//   constructor(public name: string) {}
// }
// class Teacher extends Person {
//   constructor(public age: number) {
//     super("yang")
//   }
// }
// const aa = new Teacher(11)
// console.log(aa.name)
// console.log(aa.age)

静态属性getter,setter

// name是私有属性,不想被外部所调用
// get和set可以保护私有变量
class Person {
  // _name是不想被外部访问到的变量
  constructor(private _name: string) {}
  // 通过get和set的方法可以间接访问到,并做相应处理
  get name() {
    return this._name + " ~~~"
  }
  set name(name: string) {
    const realName = name.split(" ")[1]
    this._name = realName
  }
}
const person = new Person("zhen")
console.log(person.name)
person.name = "zhen 测试"
console.log(person.name)

// 设计模式,单例模式(一个类里面,只允许通过这个类获取一个这个类的实例)
// 希望Demo永远只能生成一个类的实例
class Demo {
  private static instance: Demo
  private constructor(public name: string) {
    console.log(name)
  }
  // static 其实是public static的简写,是把static后面的属性挂载类上,而不是实例上面
  static getInstance() {
    console.log(this) //没有new 所有this指向class类本身
    if (!this.instance) {
      this.instance = new Demo("zhen") //在里面就可以访问到constructor
    }
    return this.instance
  }
}
const demo1 = Demo.getInstance()
const demo2 = Demo.getInstance()
console.log(demo1.name)
console.log(demo2.name)

 类中的readonly和抽象类

//类中使用readonly
class Person {
  constructor(public readonly _name: string) {}
  get name() {
    return this._name
  }
}
const person = new Person("zhen")
person.name = "111" //修改不了
console.log(person.name)

//抽象类(把共用性的class属性进行封装)
abstract class Geom {
  width: number
  getType() {
    return "Gemo"
  }
  abstract getArra(): number
}
class Cirtcle extends Geom {
  getArra() {
    return 111
  }
}
class Square {}
class Triangle {}

  

 

这篇关于typeScript学习(一)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!