gpt4 book ai didi

typescript - 定义接口(interface)而不导出它们

转载 作者:搜寻专家 更新时间:2023-10-30 21:52:33 24 4
gpt4 key购买 nike

如果我有一个文件 myinterface.ts

interface MyInterface {
foo() : string
}

和第二个文件 myimplementation.ts

class MyImplementation implements MyInterface {
...
}

问题 1: 为什么这样做有效?我没有导出接口(interface)。

然后,如果我想将 foo() : string 更改为 foo() : SomeType ,其中 SomeType 是在另一个模块中定义的,我需要将 myinterface.ts 修改为:

import { SomeType } form 'some-module';
interface MyInterface {
foo() : SomeType
}

这会导致 myimplementation.ts 出现错误,提示“找不到名称‘MyInterface’”。

问题 2:当您添加导入(或 export) 与文件仅包含接口(interface)(并且它们甚至未标记为导出)时的对比。

我知道最好的做法是简单地将我的界面标记为导出并执行 import {MyInterface} from 'myinterface';,但我试图理解为什么原始版本有效,以及这意味着什么。

最佳答案

快速调查:

我在 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 在没有导入的情况下都可用

因此,似乎如果您不导出文件中的任何内容,它就会被视为全局文件。我怀疑如果导出任何东西,文件就会变成一个模块。

关于typescript - 定义接口(interface)而不导出它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40750048/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com