至此,TypeScript类型系统的系列文章完结。我们从基本数据类型、字面量类型、别名类型、联合类型、交叉类型到高级类型里的条件类型、索引类型、映射类型;我们还引入了子类型兼容,同态,分布式性质,infer关键词使用,并做了一些实战练习。 感谢阅读
type Includes<T extends readonly any[], U> =T extends [infer First, ...infer Rest]? Equal<U, First> extendstrue?true: Includes<Rest, U>:false; 通过extends + infer + rest + recursive 可以 loop Tuple 返回一个 Type. 3. Keyof "able" 在解Deep Readonly题时, 里面用到了一个 keyof ab...
"R" : any; // (string|number|boolean)[] // 写法二: 由写法一演变而来 infer RtypeElementOf<T> = TextendsArray<infer R> ? R :any;typeTupleToUnion=ElementOf<[string,number,boolean]>;// 返回联合类型 string | number | boolean 获取Promise 返回值类型(递归) typePromiseV<T> = TextendsPr...
type Tuple2 = [string, number, boolean] let tuple1: Tuple1 = ['1', 1] let tuple2: Tuple2 = ['1', 1, true] let t1: Tuple1 = tuple2 // ok let t2: Tuple2 = tuple1 // error 1. 2. 3. 4. 5. 6. 7. 8. 可以看到Tuple2 => Tuple1,即长度大的是长度小的子类型,再由于...
条件类型允许基于其他类型的条件来创建新类型。type关键字可以与infer关键字结合使用,以推断类型参数。 functionisType<T>(value:T,type:new()=>T):valueisT{returnvalueinstanceoftype;}classAnimal{}classDogextendsAnimal{}letanimal:Animal=newDog();letdog:Dog=newDog();if(isType(animal,Animal)){console.lo...
infer是在typescript 2.8中新增的关键字。 infer可以在extends条件类型的字句中,在真实分支中引用此推断类型变量,推断待推断的类型。 例如:用infer推断函数的返回值类型 typeReturnType<T>= T extends (...args: any[]) => infer R ? R : any;
/*** Obtain the parameters of a function type in a tuple.* typescript/lib/lib.es5.d.ts*/typeParameters<Textends(...args:any) =>any> = Textends(...args: infer P) =>any? P : never; 11. ReturnType<Type> 构造一个由函数 Type 的返回...
type Infer<T>= T extends Array<inferU>? U : T type A = Infer<(string|Symbol)[]> 1. 2. 3. 4. 例子2配合tuple转换union联合类型 type TupleToUni<T>= T extends Array<inferE>? E : never type TTuple = [string, number]; type ToUnion = TupleToUni<TTuple>; // string | number ...
tupleType = ["Semlinker"]; 此时,TypeScript 编译器会提示以下错误信息: Property '1' is missing in type '[string]' but required in type '[string, boolean]'. 2.9 Void 类型 某种程度上来说,void 类型像是与 any 类型相反,它表示没有任何类型。当一个函数没有返回值时,你通常会见到其返回值类型是...
在上面代码中,我们定义了一个名为tupleType的变量,它的类型是一个类型数组[string, boolean],然后我们按照正确的类型依次初始化 tupleType 变量。与数组一样,我们可以通过下标来访问元组中的元素: 在元组初始化的时候,如果出现类型不匹配的话,比如: 此时,TypeScript 编译器会提示以下错误信息: ...