Typescript 获取泛型类型容器名称
如何从泛型类型中提取“upper type”,并使用它包装一个或多个泛型参数?例如:Typescript 获取泛型类型容器名称,typescript,type-inference,typescript-generics,inference,Typescript,Type Inference,Typescript Generics,Inference,如何从泛型类型中提取“upper type”,并使用它包装一个或多个泛型参数?例如: type Cont<C, T> = ... let a: Cont<Promise<number>, string>; // add string to number put in Promise<...> // Promise<number, *> <---- string // Promise<number | string>
type Cont<C, T> = ...
let a: Cont<Promise<number>, string>;
// add string to number put in Promise<...>
// Promise<number, *> <---- string
// Promise<number | string>
//
// a should be of type Promise<number|string>
let b: Cont<[string], boolean>;
// add boolean to string put in Array<...>
// Array<string, *> <---- boolean
// Array<string | boolean>
//
// b should be of type Array<string|boolean> i.e. (string|boolean)[]
type Cont=。。。
让a:继续;
//将字符串添加到承诺中的数字
//承诺为了做到这一点,你需要知道所有可能的,你称之为“上层类型”,适用于你的场景。例如,如果它们由Promise
和Array
组成,则可以这样编写:
type Cont<T, T2> = T extends Array<infer AT>
? Array<AT | T2>
: T extends Promise<infer PT>
? Promise<PT | T2>
: never;
type A = Cont<Promise<number>, string>; // Promise<string | number>
type B = Cont<string[], boolean> // Array<string | boolean>
type Cont=T扩展数组
? 数组。不知道是否需要,但请检查一次。不,不是那样的。你说的[string]
是指string[]
?它们是不同的类型。我假设你的意思是string[]
。TypeScript的类型系统是结构化的,而不是标称的;类型的名称并不重要。因此,关于Promise
或Array
或Foo
的任何内容都不能用于从中提取number
或string
或Bar
。除非您想枚举Cont
可以处理的案例列表(例如,Promise
和Array
但没有其他内容),否则无法执行此操作。用例是什么?