阅读提示:
每个方法都有相应的描述、语法、参数、返回值、注意项(可选)、例子(可选)。
语法中的[]里面中的内容表示参数为可选参数。
Array.from()
描述:从一个类似数组或可迭代对象中创建一个新的数组实例。
语法:
new_array = Array.from(arrayLike[, callback(element[, index[, array]])[, thisArg]]);
原创2020/3/12大约 23 分钟
阅读提示:
每个方法都有相应的描述、语法、参数、返回值、注意项(可选)、例子(可选)。
语法中的[]里面中的内容表示参数为可选参数。
Array.from()描述:从一个类似数组或可迭代对象中创建一个新的数组实例。
语法:
new_array = Array.from(arrayLike[, callback(element[, index[, array]])[, thisArg]]);
AwaitedAwaited<Type> 用于提取嵌套 Promise 类型的最终解析值。
T 是 Promise<U> 时,Awaited<T> 会返回 U。U 本身也是 Promise<V>,则 Awaited<T> 会继续递归,返回 V。T 不是 Promise 类型,则直接返回 T。...infertype Pop<T extends any[]> = T extends [] ? [] : T extends [...infer A, infer _] ? A : never
type Res1 = Pop<[1,2,3]> // 结果:[1,2]
type Res2 = Pop<[string]> // 推导:A = [],_ = string → 返回 []
type Res3 = Pop<[]> // 结果:[]
nevernever 表示永不存在的类型:
never(除了 never 自身);never 可以赋值给任意类型(因为它是所有类型的子类型);never 类型。let n: never;
let num: number = 123;
let u: unknown = "hello";
let v: void = undefined;
// 1. 任何类型都不能赋值给 never(除了自身)
n = num; // ❌ 报错:number 不能赋值给 never
n = u; // ❌ 报错:unknown 不能赋值给 never
n = v; // ❌ 报错:void 不能赋值给 never
n = undefined; // ❌ 报错:undefined 也不行
n = n; // ✅ 仅自身可赋值
// 2. never 可以赋值给任意类型
num = n; // ✅ 正常
u = n; // ✅ 正常
v = n; // ✅ 正常
unknown作用是替代 any 处理 类型未知 的场景,同时保证类型检查的安全性。
所有类型(基本类型、对象、函数、数组等)都可以赋值给 unknown 类型的变量;
但 unknown 类型的变量不能随意赋值给其他类型(仅能赋值给 unknown 和 any);
也不能直接操作 unknown 类型的变量(比如调用方法、访问属性、做算术运算),必须先通过类型收窄确定其具体类型,这是它比 any 安全的关键。
与 any 的区别
RecordRecord<K, T> 是用于定义键值对结构对象类型,能快速指定对象的键类型和值的统一类型。
第一个参数 K(键类型):必须是 string | number | symbol 及其子类型(比如字符串字面量、数字字面量、联合类型),否则会报错。
第二个参数 T(值类型):可以是任意类型(基础类型、对象类型、函数类型等)。
T[number]T[number] 索引访问类型 用于 从数组类型 / 元组类型中提取所有元素的类型,最终得到一个联合类型。
// 定义普通数组类型
type StringArr = string[];
type NumberArr = number[];
type BoolArr = boolean[];
// T[number] 提取元素类型
type Str = StringArr[number]; // 结果:string
type Num = NumberArr[number]; // 结果:number
type Bool = BoolArr[number]; // 结果:boolean
// 等价于直接注解类型
let s: Str = "hello"; // 等同于 let s: string
let n: Num = 123; // 等同于 let n: number
let b: Bool = true; // 等同于 let b: boolean
&& 交叉类型运算符用于将多个类型合并为一个新类型,它会将所有属性合并到新类型中。
例如:
interface Todo {
title: string
description: string
completed: boolean
}
type TodoPreview = Omit<Todo, 'description'> & {
time: Date
}
// TodoPreview 类型为:
// {
// title: string
// completed: boolean
// time: Date
// }
OmitOmit<T, K> 用于从类型 T 中排除 K 中的属性,返回一个新类型。
例如:
interface Todo {
title: string
description: string
completed: boolean
}
type TodoPreview = Omit<Todo, 'description'>
// TodoPreview 类型为:
// {
// title: string
// completed: boolean
// }
|| 运算符用于表示联合类型,即一个值可以是多个类型中的任意一个。
// 变量 a 可以是字符串 OR 数字
let a: string | number;
// 合法赋值(符合任意一种类型)
a = "TS";
a = 123;
// 非法赋值(不属于联合类型中的任何一种),TS 直接报错
a = true; // ❌ 类型 'boolean' 不能赋值给类型 'string | number'