使用tsc v2.2.2
如何修复typescript编译器错误:
错误TS4058:导出函数的返回类型具有或正在使用名称 ' {SomeInterface}'来自外部模块 " {some path} / dist / types" 但无法命名。
我的文件夹包含 index.ts 和 something.ts
// index.ts
import something from './something'
// error will point on this export below
export default function () {
return {
resultFunctionFrom: something()
};
}
// something.ts
import {ICoolInterface} from 'some-module'
export default function () {
return function (rootOfEvil:ICoolInterface) {
// ...
};
}
我会用这样的代码得到这个错误:
错误TS4058:导出函数的返回类型具有或正在使用名称 ' ICoolInterface'来自外部模块 " /文件夹/ node_modules /一些模块/ DIST /类型" 但无法命名。
答案 0 :(得分:3)
对我来说,返回类型:'index.ts'中的任何默认导出都可以解决问题。而且无需导出ICoolInterface。也许使用它是一种不好的做法:任何像这样但至少它编译并且我在'something.ts'中的函数很好地描述了arg类型和返回类型。 所以这将有效:
// index.ts
import something from './something'
// error will point on this export below
// ------------------------\/-----------
export default function ():any { // trouble solver
// ------------------------/\-----------
return {
resultFunctionFrom: something()
};
}
// something.ts
import {ICoolInterface} from 'some-module'
export default function () {
return function (rootOfEvil:ICoolInterface) {
// ...
};
}
答案 1 :(得分:1)
更新:这应该不再发生在TypeScript 2.9中,并解决了下面链接的问题9944。 https://github.com/Microsoft/TypeScript/wiki/What's-new-in-TypeScript#relaxing-declaration-emit-visiblity-rules
目前,您需要在ICoolInterface
中明确导入index.ts
:
// index.ts
import {ICoolInterface} from 'some-module'
考虑跟踪此GitHub issue他们正在考虑更改此TypeScript行为的位置。
函数或变量没有明确的类型注释。 声明发射器推断出它们的类型并尝试编写它。如果 类型来自不同的模块,然后是。它需要添加一个 进口或b。错误。
发射器可以写入额外的导入,但那可能就是 以您未明确指出的方式更改API形状 码。所以我们选择了错误。
修复方法是在源代码上添加显式类型注释 问题。
有了这个,我想我们应该重新考虑这个设计决定, 并且无论如何都要添加进口。
注意:如果您使用的是WebStorm,则会收到有关未使用导入的警告。您可以使用导入上方的评论//noinspection ES6UnusedImports
停用警告。 GUI替代方法:在导入行上按Alt + Enter
并显示警告。右箭头显示Remove unused 'import'
弹出式菜单上的更多选项,然后选择Suppress for statement
以禁用此特定行上的警告。