Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 获取泛型类型容器名称_Typescript_Type Inference_Typescript Generics_Inference - Fatal编程技术网

Typescript 获取泛型类型容器名称

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>

如何从泛型类型中提取“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>
//
// 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
但没有其他内容),否则无法执行此操作。用例是什么?