考虑这个定义:
interface Domain<Model, Name extends string> {
name: Name;
edit(cb: (m: Model) => Model): Domain<Model, Name>;
}
declare function createDomain<
M extends { [key: string]: any } = {},
N extends string = string
>(name: N): Domain<M, N>;
IDE能够为您提供正确的检查(如图所示):这是因为打字稿能够将'foo'
推断为extends N /* string */
的文字类型。
如果我为通用qazxsw poi提供签名,那么打字稿会丢失有关qazxsw poi的信息并返回一个通用的M
。 'foo'
如何更改上述定义以保留有关string
的信息?