我想在我的基于 typescript 的项目中在他们自己的文件中定义几个接口,我将从这些接口中实现用于生产的类以及用于测试的模拟。但是,我无法弄清楚正确的语法是什么。我找到了很多关于声明接口和实现它们的教程,但是它们都在同一个文件中对接口和派生类进行了简单的实现,这不是很真实。导出和导入接口的正确方法是什么?
您需要从定义的文件中导出接口,然后将其导入到您想要使用的任何位置。
在 IfcSampleInterface.ts
中:
export interface IfcSampleInterface {
key: string;
value: string;
}
在 SampleInterface.ts
import { IfcSampleInterface } from './IfcSampleInterface';
let sampleVar: IfcSampleInterface;
使用定义 (d.ts
) 文件和命名空间,无需以这种方式导入/导出模块。绝对类型的项目有 guidance 和大量的 examples 怎么做。
module.ts
和 module.d.ts
在同一文件夹中,编译器将跳过 module.d.ts
文件,因此不会考虑您的声明。重命名 d.ts
文件或将其移动到另一个文件夹。如果您有一个正确的模块,这种方法很好,但如果您想在模块之间共享类型,最好使用import .. from ..
。
d.ts
添加到我的反应项目中,但我仍然需要导入接口。
export
类型时不是全局可用的。有一个老问题,类型共享的 d.ts
似乎是一个可行的选项(由团队成员建议):github.com/microsoft/TypeScript/issues/10908。在尝试创建仅包含共享使用的类型定义的模块时发现。为此使用 .ts
文件会导致该文件包含在输出中(显然是空的)。也就是说,同意,这不是声明文件的预期用途。
只导出几个接口
在不分散多个导出的情况下,您可以将它们分组到一个 export {}
块中(在这种情况下,不应声明文件 default
类型):
// interfaces.ts
interface IWords {
[key: string]: string;
}
interface INumbers {
[key: string]: number;
}
interface IBooleans {
[key: string]: boolean;
}
interface IValues {
[key: string]: string | number;
}
interface IStructures {
[key: string]: INumbers | IBooleans | IValues;
}
export {
// not exporting IWords | INumbers
IBooleans,
IValues,
IStructures,
}
导入示例
import { IBooleans, IValues, IStructures } from 'interfaces';
const flags: IBooleans = { read: true, write: false, delete: false };
const userFile: IValues = { user: 1, username: 'One', file: 'types.txt' };
const userContext: IStructure = {
file: userFile,
permissions: flags,
counts: { views: 3, writes: 1 } // => INumbers (lint: try to remove IValues from IStructures)
};
您需要在定义的文件中导出接口,然后在使用它们的文件中导入它们。有关示例,请参见此链接。
x.ts
interface X{
...
}
export default X
y.ts
import X from "./x.ts"
// You can use X now
有关详细信息,请参阅 https://www.typescriptlang.org/docs/handbook/modules.html
您可以在相对较新的项目中使用以下语法
`import type { xxx } from './xxx'`
https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html
type {
帮助解决了一个令我非常恼火的问题。谢谢