typescript知识点-常用的ts工具类型

62 阅读2分钟

1、keyof

keyof:单目运算符,接受一个对象类型作为参数,返回该对象的所有键名组成的联合类型

type MyObj = {
 foo: number;
 bar: string;
};

type Keys = keyof MyObj; // 'foo'|'bar'
interface T {
  0: boolean;
  a: string;
  b(): void;
}

type KeyT = keyof T; // 0 | 'a' | 'b'

由于 JavaScript 对象的键名只有三种类型,所以对于任意对象的键名的联合类型就是string|number|symbol

// string | number | symbol
type KeyT = keyof any;

顺便说一下typeof:

typeof 运算符是一个一元运算符,返回一个字符串,代表操作数的类型

keyof typeof 一起使用

先用typeof转换成类型,再用keyof聚合键名的联合类型 常用来操作一个对象

2、ReturnType 用于获取函数的返回类型

比如一些函数需要返回一些指定结构的数据

3、Record类型

Record<Keys,Type>用于创建具有特定键和统一值类型的对象类型, 比如说 你有一个数组对象 对象的key和value都是字符串类型 就可以这么定义Array<Record<string, string>>

4、Partial 将对象的所有属性变为可选

通常用于Partial<interface>来创建一个所有属性都是可选的类型, 通常用于需要局部更新一个interface类型中的某些字段

5、Required 将对象的所有属性变为必选

Required<interface> 确保我们在处理一个对象所有的字段时 具有完整性和一致性

6、Omit 用于从对象类型中移除某些属性

 type Todo = {
  title: string;
  description: string;
  createdAt: Date;
}

const todoWithoutCreatedAt: Omit<Todo, "createdAt"> = { title: "Hello", description: "World" }; 
// todoWithoutCreatedAt 不包含 createdAt 属性

7、Awaited

用于获取等待一个 Promise 解析后的结果类型

 async function displayTodoItem() {
     const todo: Awaited<TodoItem> = await fetchTodoItem(); 
     //现在你可以在完全类型支持下使用 `todo` 
     console.log(`Todo Item: ${todo.id}, Title: ${todo.title}, Completed: ${todo.completed}`); 
 }

参考文章:https://cloud.tencent.com/developer/article/2431872

void 和 never

都是函数的返回值 void是没有值的返回 never是永远没有返回 比如说在一个throw error的函数里

any 和 unknow

  • any  就是不检查类型,允许你将其赋值给任何类型,而不会引发错误。
  • unknown 不能直接赋值给其他类型,除非进行类型检查或类型断言。