返回特定类型的 TypeScript 键
Posted
技术标签:
【中文标题】返回特定类型的 TypeScript 键【英文标题】:TypeScript keyof returning specific type 【发布时间】:2018-09-19 23:39:38 【问题描述】:如果我有以下类型
interface Foo
bar: string;
baz: number;
qux: string;
我可以使用typeof
键入一个参数,这样它只需要返回string
的Foo
的键('bar'
或'qux'
)?
【问题讨论】:
【参考方案1】:Typescript 4.1 及以上版本
通过在映射类型中添加as
子句,我们现在可以将原始类型简化为:
type KeyOfType<T, V> = keyof
[P in keyof T as T[P] extends V? P: never]: any
Playground Link
原答案
您可以在 Typscript 2.8 中使用条件类型:
type KeysOfType<T, TProp> = [P in keyof T]: T[P] extends TProp? P : never [keyof T];
let onlyStrings: KeysOfType<Foo, string>;
onlyStrings = 'baz' // error
onlyStrings = 'bar' // ok
let onlyNumbers: KeysOfType<Foo, number>;
onlyNumbers = 'baz' // ok
onlyNumbers = 'bar' // error
Playground Link
【讨论】:
感谢您的回答。在我使用它时,我发现我需要扩展KeysOfType
以包含keyof T & [P ....
,否则我不能使用KeysOfType
来下标T
。以上是关于返回特定类型的 TypeScript 键的主要内容,如果未能解决你的问题,请参考以下文章