有没有办法在条件打字稿中使用扩展字符串进行推理?
Is there a way to make inference work with extended string in conditional typescript?
我正在尝试提取通用字符串文字类型,但打字稿推断 returns 仅提取字符串类型。
所以从技术上讲,一旦将字符串文字类型传递给函数,我们就无法再提取它。
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'?
中的代码
在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"
我正在尝试提取通用字符串文字类型,但打字稿推断 returns 仅提取字符串类型。
所以从技术上讲,一旦将字符串文字类型传递给函数,我们就无法再提取它。
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'?
中的代码
在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"