TS中的类型,函数和类(复习)

176 阅读2分钟

类型相关

数组类型

定义数组类型有两种方式。

let arr: number[] = [1, 2, 3, 4]
let arr: string[] = ['1', '2', '3']
//第二种
let arr: Array<number> = [1, 2, 3, 4]
let arr: Array<string> = ['1', '2', '3']

元组类型,属于数组的一种,可以定义多种类型。

let arr: [string, number, boolean] = ['ts', 1, true]

枚举类型

enum 枚举名 {
	标识符 = 整形常数
	标识符 = 整形常数
	标识符 = 整形常数
}

enum Flag {
  success = 1,
  error = -1,
}
var f: Flag = Flag.success
console.log(f)// 1

enum Color { red, blue, orange }
let c: Color.blue
console.log(c)//1

enum Color { red, blue=5, orange }
let c: Color.orange
console.log(c)//6

我们发现枚举类型有值的时候拿值,没值会把枚举的索引作为值。在他之前的枚举有值,会在那个值上面累加。 ​

void 类型

表示没有任何类型。

function console(): viod{
	console.log('123')
}

function console(): number{
	return 123
}

一般用在定义的方法没有返回值的时候,如果有返回值,返回值得按照函数的定义类型

函数相关

普通定义

//普通
function getInfo(name: string, age: number): string {
  return `${name}---${age}`
}
getInfo('coolFish', 20)


一个普通的函数定义,需要定义参数类型和返回值的类型,方法的形参和实参必须一致,如果要不一致不许配置可选阐述。

可选参数

//可选参数
function getInfo(name: string, age?: number): string {
 if(age){
    return `${name}---${age}`
 }else{
   return name
}
getInfo('coolFish')

默认参数

 //默认参数
 function getInfo(name: string='coolFish', age?: number): string {
 if(age){
    return `${name}---${age}`
 }else{
   return name
}
getInfo('yzy')

剩余参数

//原本
function sum(a: number, b: number, c: number, d: number): number {
  return a + b + c + d
}
console.log(sum(1, 2, 3, 4))
//使用剩余参数
function sum(...result: number[]): number {
  let sum = 0
  for (let i = 0; i < result.length; i++) {
    sum += result[i]
  }
  return sum
}
console.log(sum(1, 2, 3, 4))
//分离定义

function sum(a: number, ...result: number[]): number {
  let sum = 0
  for (let i = 0; i < result.length; i++) {
    sum += result[i]
  }
  return sum
}
console.log(sum(1, 2, 3, 4))

函数重载

function getInfo(name: string): string;
function getInfo(name: number): string;
function getInfo(str: any): any {
  if (typeof str === 'string') {
    return '名字' + str;
  } else {
    return '年龄' + str
  }
}
console.log(getInfo(25))
console.log(getInfo('coolFish'))

小结:根据参数不同类型,执行不同逻辑,叫做方法的重载。

TS中的类

基本写法

class Person {
  name: string;
  constructor(name: string) {
    this.name = name
  }
  getName(): string {
    return this.name
  }
  setName(name: string): void {
    this.name = name
  }
}
const p = new Person('coolFish')
console.log(p.getName())
console.log(p.setName('yzy'))

实例方法

实例方法,需要实例化后才能使用。

class Person {
  public:name:string;
	public:age:number=20;
  constructor(name: string) {
    this.name = name
  }
  run(): string {
    return `${this.name}在跑步`
  }
  getName(): string {
    return this.name
  }
}
let  p = new Person('coolFish')
p.run()

静态方法和静态属性

静态方法里面,没法直接调用类里面的属性。 静态属性可以在静态方法中使用。

//实例方法,需要实例化后才能使用
class Person {
  public name: string;
  public age: number = 20;
  static sex: "男"
  constructor(name: string) {
    this.name = name
  }
  static work() {
    return this.name + '正在敲代码'
    //
  }
  static MySex() {
    return `我的性别${Person.sex}`
    //
  }
}
Person.work()
Person.MySex()

super

super 作为函数调用时,代表父类的构造函数。ES6 要求,子类的构造函数必须执行一次 super() 函数。注意:作为函数时,super() 只能用在子类的构造函数之中,用在其他地方就会报错。

类里的修饰符

  1. public : 公有,在类里面,子类,类外面都可 访问
  2. protected :保护类型,在类里面,子类里面都可访问,类外部没法访问
  3. private :私有,只有在类里面可以访问

属性不加修饰符,默认就是公有属性 ​