0
点赞
收藏
分享

微信扫一扫

C++堆详细讲解

瑾谋 03-28 22:30 阅读 2

泛型T

T 是一个抽象类型,只有在调用的时候才确定它的值

function identity<T>(arg: T): T {
  return arg;
}

其中 T 代表 Type,在定义泛型时通常用作第一个类型变量名称。但实际上 T 可以用任何有效名称代替。

常见泛型变量:

  • K(Key):表示对象中的键类型;
  • V(Value):表示对象中的值类型;
  • E(Element):表示元素类型。

泛型约束

T 类型并使用 extends 关键字约束该类型

//对使用的泛型进行约束,我们约束其为具有length属性的类型
interface Len {
   length:number
}
 
function getLegnth<T extends Len>(arg:T) {
  return arg.length
}
 
getLegnth<string>('123')

泛型工具

1、typeof

typeof 的主要用途是在类型上下文中获取变量或者属性的类型

interface Person {
  name: string;
  age: number;
}
const kk: Person = { name: "semlinker", age: 30 };

//通过 typeof 操作符获取 kk 变量的类型并赋值给 Sem 类型变量,之后我们就可以使用 Sem 类型
type Sem = typeof kk; // type Sem = Person

const joy: Sem = { name: "joy", age: 5 }

2、keyof

keyof 操作符是在 TypeScript 2.1 版本引入的,该操作符可以用于获取某种类型的所有键,其返回类型是联合类型

首先定义了 T 类型并使用 extends 关键字约束该类型必须是 object 类型的子类型,然后使用 keyof 操作符获取 T 类型的所有键,其返回类型是联合类型,最后利用 extends 关键字约束 K 类型必须为 keyof T 联合类型的子类型。

type Todo = {
  id: number;
  text: string;
  done: boolean;
}

const todo: Todo = {
  id: 1,
  text: "Learn TypeScript keyof",
  done: false
}

function prop<T extends object, K extends keyof T>(obj: T, key: K) {
  return obj[key];
}

const id = prop(todo, "id"); // const id: number
const text = prop(todo, "text"); // const text: string
const done = prop(todo, "done"); // const done: boolean

3、in

in 用来遍历枚举类型

4、infer

infer就是推导泛型参数

infer声明只能出现在extends子语句中

举报

相关推荐

0 条评论