如果我有一个文件myinterface.ts
interface MyInterface {
foo() : string
}
和第二个文件myimplementation.ts
class MyImplementation implements MyInterface {
...
}
问题1: 为什么这样做?我没有导出界面。
然后,如果我想将foo() : string
更改为foo() : SomeType
,其中SomeType
在另一个模块中定义,我需要将myinterface.ts修改为:
import { SomeType } form 'some-module';
interface MyInterface {
foo() : SomeType
}
这导致myimplementation.ts中的错误,说“找不到名字'MyInterface'”。
问题2: 添加导入(或)时,* .ts文件的更改方式有何变化导出)与文件只包含接口的时间(甚至不标记为导出)。
我知道最好的做法是简单地将我的界面标记为导出并执行import {MyInterface} from 'myinterface';
,但我试图了解原始版本的工作原理以及含义是什么。
答案 0 :(得分:1)
快速调查:
我在InterfaceFile.ts中有这个:
interface MyInterface {
foo(): string
}
var s = 4;
这是一个名为ImplFile.ts的文件
class MyImplementation implements MyInterface {
foo(): string {
return 'foo';
}
}
s.toExponential(1);
现在,当我查看编译的InterfaceFile.js时,我看到了:
var s = 4;
ImplFile.ts中的s.toExponential(1)
导致编译器没有问题(Webstorm也将其设置为全局样式)。
现在,如果我明确导出s
;
interface MyInterface {
foo(): string
}
export var s = 4;
我明白了:
exports.s = 4;
如果没有导入, s
和MyInterface
都不可用
所以,好像你不在文件中导出任何东西,它被视为全局。我怀疑如果导出任何内容,该文件将成为一个模块。