如何以编程方式创建联合类型

时间:2018-04-06 15:43:39

标签: typescript typescript2.0

我有一堆我在文件中导出的类型。

# myTypes.ts
export type Foo = {
  foo: string
}

export type Bar = {
  bar: string
}

export type Baz = {
  baz: string
}

当我导入它们时,我必须手动将它们合并为一个新类型

# otherFile.js
import * as types from './myTypes.ts'
type MyUnion = types.Foo | types.Bar | types.Baz 

有什么办法可以通过编程方式更好地完成这项工作吗?我认为应该有类似Array#join的东西

提前致谢!

2 个答案:

答案 0 :(得分:2)

实际上,在TS 2.1+中,您可以编写:

type myUnion = typeof types[keyof typeof types];

说明:

  • “ typeof types”可以看作是以下类的类型:

    class types {
      Foo: typeof Foo;
      Bar: typeof Bar;
      Baz: typeof Baz;
    }
    
  • “ keyof”返回一种类型的键的类型,即:

    keyof typeof types === 'Foo' | 'Bar' | 'Baz';
    
  • “ []”也称为查找类型运算符。 A [B]是类型A属性的类型,可以通过类型B的键来访问。

    types['Foo'] === typeof Foo;
    string['length'] === number;
    

您可以检查https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-1.html以获得有关最后两个关键字的更多信息。

@readers_of_this_answer让我知道是否清楚。

答案 1 :(得分:0)

这根本不可能。 Typescript无法在运行时创建类型,因为它是编译语言。