定义接口而不导出它们

时间:2016-11-22 19:24:55

标签: typescript

如果我有一个文件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';,但我试图了解原始版本的工作原理以及含义是什么。

1 个答案:

答案 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;

如果没有导入, sMyInterface都不可用

所以,好像你不在文件中导出任何东西,它被视为全局。我怀疑如果导出任何内容,该文件将成为一个模块。