有没有办法在条件打字稿中使用扩展字符串进行推理?

问题描述 投票:0回答:1

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

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

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

typescript inference
1个回答
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"
© www.soinside.com 2019 - 2024. All rights reserved.