TS 泛型 keyOf、TypeOf、索引访问类型、条件类型

793 阅读1分钟

1. 泛型

function func(age: number): number{
  return age
}

假如说我们要改变函数的入参的类型

1. 泛型入门

function funcA<Type>(age: Type) : Type{
  return age
}

// 在调用的时候就可以 
let a = funcA('fdasfa')
let b = funcA(123);
// console.log(a)
// console.log(b)

2. 使用泛型类型变量

function funcB<Type>(arg: Type): Type {

  // 报错Type 上不存在length属性
  // console.log(arg.length) 
  return arg
}

function funcBB<Type>(arg: Type[]): Type {
  // 约束 Type 要有length 属性
  // console.log(arg.length)
  return
}

3. 通用类型

给函数声明一个类型。

function C<Type>(arg: Type): Type{
  return arg
}

let myIdentity: <Input>(input: Input) => Input = C;

可以将泛型类型写为 对象字面量类型的调用签名: 对象字面量是什么? what?

function CC<Type>(arg: Type): Type{
  return arg
}

let c3 : {<Input>(input: Input): Input} = CC

把对象字面量, 移到一个通用的接口上面。

interface ID{
  <Type>(arg: Type): Type
}

function D1<Type>(arg: Type): Type {
  return arg
}

let myD1 : ID = D1   // 就可以用这个接口来描述函数的类型了。

在上面的这个栗子中, 我们希望泛型参数可以被整个接口所用。 形如 Dictionary 而不是 Dictionary 。我们可以这样做