KFo*_*Fox 8 import module export interface typescript
我正在使用typescript创建一个库,它分布在多个文件中.我获取了我定义的所有类和常量,并将它们导入到一个模块中,该模块将它们全部导出到一个名称空间下.我刚刚定义了一个接口,我希望将它包含在与我库的所有其他部分相同的命名空间/模块中.但显然我做不到.
这是一个简化的例子:
/app.ts是应用程序的入口点,我现在所做的只是包含我的库MyLib:
//app.ts
import myLib = require("lib/MyLib/MyLib"); // this works fine
Run Code Online (Sandbox Code Playgroud)
/lib/MyLib/MyLib.ts是我导入MyLib定义的所有内容并将它们一起导出的文件:
// lib/MyLib/MyLib.ts
import VehiclesImport = require("./transport/vehicles");
// error under VehiclesImport.IAutomobile, saying that VehiclesImport has no property IAutomobile
export var IAutomobile = VehiclesImport.IAutomobile;
export var Car = VehiclesImport.Car;
Run Code Online (Sandbox Code Playgroud)
在/lib/MyLib/transport/vehicles.ts中,我定义了几个车辆的类和接口,在这里,我将展示IAutomobile和Car:
// lib/MyLib/transport/vehicles.ts
export interface IAutomobile {
weight: number
}
export class Car implements IAutomobile {
weight = 3000
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试在MyLib.ts中创建一个类卡车,它正确实现了IAutomobile,并且工作正常,没有任何错误消息.当我想在'implements'语句之外访问IAutomobile时,似乎只会出现这个问题.
我很抱歉,如果这看起来像'代码转储',但在我看来,这是一个严重的问题,除了在类声明中我无法访问我的接口.我在过去的两个小时里搜索过谷歌,但没有发现任何关于此问题的信息.感谢你给与我的帮助!
编辑:我知道typescript接口不是编译的javascript代码的一部分,但这不应该阻止我在打字稿中操纵它们.
使用import关键字将某些内容引入类型声明空间(而不是var将其带入变量声明空间).
这在下面说明.a.ts:
export interface A {
val: number;
}
Run Code Online (Sandbox Code Playgroud)
要从另一个文件重新导出它b.ts:
import a = require('./a');
export import B = a.A; // Important use of import
Run Code Online (Sandbox Code Playgroud)
其他文件中的示例用法c.ts:
import b = require('./b');
var foo: b.B;
foo.val = 123;
interface C extends b.B {
val2:number;
}
var bar: C;
bar.val2 = 456;
Run Code Online (Sandbox Code Playgroud)
该示例按照TS 语言规范进行了重写:
a.ts:
export interface A {
val: number;
}
Run Code Online (Sandbox Code Playgroud)
要从另一个文件重新导出该文件b.ts:
export {A} from './a'
Run Code Online (Sandbox Code Playgroud)
在其他文件中的用法c.ts:
import {A} from './b'
var foo: A = {val: 2};
foo.val = 123;
interface C extends A {
val2:number;
}
var bar: C = {val: 1, val2: 3};
bar.val2 = 456;
Run Code Online (Sandbox Code Playgroud)