Typescript-从模块导入的类型

Typescript-从模块导入的类型,typescript,graphql,Typescript,Graphql,我有点像: import * as Types from '../schema/types'; let a: Types; 我想做一些事情,比如: import * as Types from '../schema/types'; let a: Types; 指示a必须是从types.ts导出的多个类型之一。我该怎么做?(是的,它是一个graphql服务器)我想不出一种自动执行的方法,但您需要的是一个 假设您在。/schema/types中声明了以下类型: interface Foo {

我有点像:

import * as Types from '../schema/types';
let a: Types;
我想做一些事情,比如:

import * as Types from '../schema/types';
let a: Types;

指示
a
必须是从
types.ts
导出的多个类型之一。我该怎么做?(是的,它是一个graphql服务器)

我想不出一种自动执行的方法,但您需要的是一个

假设您在
。/schema/types
中声明了以下类型:

interface Foo {
 ...
}

interface Bar {
 ...
}
从“../schema/Types”以
import*作为类型导入

您可以创建一个联合类型,如:

type GqType = Types.Bar | Types.Foo;
然后,您可以创建一个类似以下内容的
a

let a: GqType;

看起来您打算使用
联合类型
。对于typescript,您可以参考下面的示例-

场景1:在其他模块中构造单个类型,并在使用过程中使用union:

import {a,b} from './types';

let a: a|b;
类型。ts

type a = {
    name: string;
}

type b ={
    name: number;
}

export type {a, b}
type a = {
    name: string;
}

type b ={
    id: string;
}

export type types = a|b
您可以像这样使用它:

import {a,b} from './types';

let a: a|b;

import * as types from './types';

let a: types.a|types.b;
场景2:在其他模块中构造联合类型并在调用端使用:

import {a,b} from './types';

let a: a|b;
类型。ts

type a = {
    name: string;
}

type b ={
    name: number;
}

export type {a, b}
type a = {
    name: string;
}

type b ={
    id: string;
}

export type types = a|b
使用它

import {types}  from './types';

let a: types;
要使用
图形ql中的联合类型,请使用前面提到的示例-

更新:看到您关于获取所有类型的评论后,答案是
接口
类型
属于
类型空间
,它们甚至不存在于
JS
世界中,它们只是编译器提示对象具有特定结构。换句话说,您甚至不能像在
类中那样,通过
Object.Keys/Object.entries
从模块中获取所有类型并分配它们。
这些甚至在运行时都不存在


您最好将它们从模块中提取出来并转换为
联合类型
,或者在types.ts文件中构造联合类型并在主文件中使用它们。

不是直接的答案,因此请改为注释。也许这会有帮助:我们正在使用这个:,但是谢谢!这是有道理的,但我恐怕不适合我的情况。我有很多类型也是自动生成的..就像@smac89的答案一样。。。我有很多是自动生成的,因此我需要有一个自动的方法将它们全部放入联合类型QQ-您如何从types.ts文件导出这些自动生成的类型?导出a={…}导出B={…}