首页 > 解决方案 > 有没有办法在条件打字稿中使用扩展字符串进行推理?

问题描述

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

因此,从技术上讲,一旦将字符串文字类型传递给函数,我们就不能再提取它了。

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中的代码

标签: typescriptinference

解决方案


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

但是条件类型有特殊的语法告诉编译器你想要推断出实际类型:

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"

推荐阅读