文字类型推断 - 打字稿

时间:2017-12-28 14:29:25

标签: typescript types typescript-typings typescript2.0 dynamic-typing

考虑这个定义:

.localeCompare()

IDE能够为您提供正确的检查(如图所示): enter image description here 这是因为 typescript 能够将 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>; 推断为 'foo' 的文字类型。

如果我为通用extends N /* string */提供签名,则typescript会丢失有关M的信息并返回通用'foo'enter image description here

如何更改上述定义以保留有关string的信息?

1 个答案:

答案 0 :(得分: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");