如何在TypeScript中获取泛型的特定“实例”的“内部类型”

时间:2019-07-23 03:11:15

标签: typescript

除了标题中找不到更好的词来解释它,所以我让代码来讨论:

let var1 = someExternalLibraryMethod(); // assume var1 is implicitly Promise<string>

let var2: typeof var1; // this works, and this way I can "bind" the types of both vars without hardcoding them to the same type (i.e. instead of let var2: Promise<string>;)

let var3: ???????; //I want to "bind" this type to var1's "inner" type without hardcoding it (i.e. instead of let var3: string;)

我对Promise<string>的选择是任意的。我正在寻找一种可以与其他通用类型的“实例”一起使用的方法,例如rxjs.Observable<number>mongoose.Schema<{_id: number}>

它也无需硬编码“外部”类型也可以工作。也就是说,“承诺”一词不应出现在任何地方。如果TypeScript确实支持这一点,我想语法会像这样

let var3: InnerTypes<typeof var1>[0]; // This is a guess and does not actually work

1 个答案:

答案 0 :(得分:0)

您可以使用条件类型。这是一般的想法:

type Container = ReturnType<typeof someExternalLibraryMethod>; // Promise<string>
type Inner = Container extends Promise<infer I> ? I : never;

关键是可以在extends查询中推断内部类型。

Playground