我有一堆我在文件中导出的类型。
# 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的东西
提前致谢!
答案 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无法在运行时创建类型,因为它是编译语言。