Roa*_*ers 8 typescript typescript3.0
我有Maybe类型的元组:
class Maybe<T>{ }
type MaybeTuple = [Maybe<string>, Maybe<number>, Maybe<boolean>];
Run Code Online (Sandbox Code Playgroud)
我想把它变成一个类型的元组:
type TupleIWant = [string, number, boolean];
所以我试过这个:
type ExtractTypes<T> = T extends Maybe<infer MaybeTypes>[] ? MaybeTypes : never;
type TypesArray = ExtractTypes<MaybeTuple>; // string | number | boolean NOT [string, number, boolean]
Run Code Online (Sandbox Code Playgroud)
哪个不起作用:-(
我得到的(string | number | boolean)[]不是我想要的元组:[string, number, boolean]
我现在想做什么?
您需要使用映射的元组类型,TypeScript 3.0不支持该类型,但主分支支持该类型,并将在TypeScript 3.1中发布.在3.1发布之前,您可以使用未发布的TypeScript版本,或者作为变通方法,您可以编写条件类型以匹配元组,只要您认为自己可能具有这种类型,例如,像这样.
在打字稿3.0,你可以有属性映射类型0,1以及2正确的类型,像这样的:
class Maybe<T>{}
type MaybeTuple = [Maybe<string>, Maybe<number>, Maybe<boolean>];
type MaybeType<T> = T extends Maybe<infer MaybeType> ? MaybeType : never;
type MaybeTypes<T> = {[P in keyof T]: MaybeType<T[P]>};
let extractedTypes: MaybeTypes<MaybeTuple> = ["hello", 3, true]
Run Code Online (Sandbox Code Playgroud)
然而,如所描述这里,它不是一个真正的元组类型,而不是分配给真正的元组类型[string, number, boolean].
| 归档时间: |
|
| 查看次数: |
1232 次 |
| 最近记录: |