除了标题中找不到更好的词来解释它,所以我让代码来讨论:
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
答案 0 :(得分:0)
您可以使用条件类型。这是一般的想法:
type Container = ReturnType<typeof someExternalLibraryMethod>; // Promise<string>
type Inner = Container extends Promise<infer I> ? I : never;
关键是可以在extends
查询中推断内部类型。