文字类型推断 - 打字稿
Posted
技术标签:
【中文标题】文字类型推断 - 打字稿【英文标题】:Literal Type inference - Typescript 【发布时间】:2018-06-09 02:36:06 【问题描述】:考虑到这个定义:
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 能够为您提供正确的检查(如图所示):
这是因为 typescript 能够将 'foo'
推断为 extends N /* string */
的文字类型。
但是
如果我为泛型 M
提供签名,那么 typescript 会丢失有关 'foo'
的信息并返回泛型 string
。
如何更改上述定义以保留有关N
的信息?
【问题讨论】:
【参考方案1】:我看到了这些选项:
提供第二种
let domain = createDomain<Todo, "foo">("foo");
建造工厂
function funcCreateDomain<M>()
return <N extends string>(name: N) => createDomain<M, N>(name);
let factory = funcCreateDomain<Todo>();
let domain = factory("foo");
【讨论】:
不幸的是,更改表面 api 不是一种选择,手动提供文字类型看起来是多余的。以上是关于文字类型推断 - 打字稿的主要内容,如果未能解决你的问题,请参考以下文章