将打字稿接口属性类型转换为联合[重复]
Posted
技术标签:
【中文标题】将打字稿接口属性类型转换为联合[重复]【英文标题】:Turn typescript interface property types into union [duplicate] 【发布时间】:2022-01-04 17:56:23 【问题描述】:我有这个接口,我想根据它包含的键类型生成一个新类型。
interface SomeType
abc: string;
def: number;
ghi: boolean;
要生成的类型:
type SomeOtherType = string | number | boolean
这在打字稿中可行吗?
【问题讨论】:
这就是keyof
的全部目的
【参考方案1】:
您可以尝试使用 keyof 运算符进行索引:
interface SomeType
abc: string;
def: number;
ghi: "sdf";
type t = SomeType[keyof SomeType];
类型 t 将被假定为来自对象值的类型联合:
https://www.typescriptlang.org/play?#code/JYOwLgpgTgZghgYwgAgMoHsC2EAqBPABxQG8AoZZOAIwQC5kBnMKUAcwG5zkATCGekAFdMVaJwqsAFsHoAiBtxizOAX1KkwhFGGQBeNFlxaA2gGsIedDAPZ8RALrsgA
【讨论】:
Please replace/supplement images of code/errors with plaintext versions. @jcalz 已修复 :-)【参考方案2】:您可以使用一个技巧来生成接口的值:
interface SomeType
abc: string;
def: number;
ghi: boolean;
//First generate a type that works as a "valueof" (similar to keyof)
type ValueOf<T> = T[keyof T];
//Then obtain the values
type Values = ValueOf<SomeType> // Values = string | number | boolean
//ValueOf re-usable component, however it is enough also SomeType[keyof SomeType]
//If you need the keys on the other hand "keyof" is enough:
type Keys = keyof SomeType // Keys = 'abc' | 'def' | 'ghi'
【讨论】:
以上是关于将打字稿接口属性类型转换为联合[重复]的主要内容,如果未能解决你的问题,请参考以下文章