有没有一种方法可以使条件打字稿中的扩展字符串起作用?

时间:2019-03-28 01:12:43

标签: typescript inference

我正在尝试提取通用字符串文字类型,但打字稿推断仅返回类型字符串。

从技术上讲,一旦将字符串文字类型传递给函数,我们就无法提取它。

type Key<T extends string> = { key: T };

declare function getKey<T extends string>(key: T): Key<T>;

let someKey = getKey('check');

declare function updateWithKey<T, K extends string>(key: T): T extends Key<K> ? K : never;

let someUpdatedKey = updateWithKey(someKey); // Shouldn't be 'check'?

这是Playground

中的代码

1 个答案:

答案 0 :(得分:2)

updateWithKey中,K不会出现在编译器可以自动推断的位置,因此它被认为是允许的最通用类型,即string

但是条件类型have special syntax告诉编译器您要推断实际类型:

type Key<T extends string> = { key: T };

declare function getKey<T extends string>(key: T): Key<T>;

let someKey = getKey('check');

declare function updateWithKey<T>(key: T): T extends Key<infer K> ? K : never;

let someUpdatedKey = updateWithKey(someKey); // let someUpdatedKey: "check"