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={…}