将打字稿接口属性类型转换为联合[重复]

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'

【讨论】:

以上是关于将打字稿接口属性类型转换为联合[重复]的主要内容,如果未能解决你的问题,请参考以下文章

打字稿将联合转换为交集[重复]

如何在打字稿接口/类型中将枚举值类型转换为数组?

将 JSON 对象转换/翻译为打字稿类型/接口的工具?

类型转换时的打字稿默认属性

具有命名属性和不同类型的任意命名索引属性的打字稿接口[重复]

将对象转换为联合类型