typescript - 錯誤 TS4058:匯出的函式的返回類型使用了來自外部模組 Y 的名稱 X,但無法命名
使用 tsc v2.2.2
如何修復 TypeScript 編譯器錯誤:
錯誤 TS4058:導出的函數的返回類型使用了或是來自外部模組 "{some path}/dist/types" 的名稱 '{SomeInterface}',但無法命名。
我有一個資料夾,裡面有 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:導出的函數的返回類型使用或是來自外部模組 "/folder/node_modules/some-module/dist/types" 的名稱 'ICoolInterface',但無法被命名。
答案#1
更新:參見其他答案。不要使用 any 來讓 TS 錯誤消失。這個問題很久以前就已經有人回答了。
對我來說,在 'index.ts' 的預設導出使用返回類型 :any 起了作用。而且不需要導出 ICoolInterface。也許像這樣使用 :any 是不好的做法,但至少它可以編譯,而且我在 'something.ts' 中的函數用參數類型和返回類型描述得很好。所以這樣會有效:
// 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) {
// ...
};
}
答案#2
今天早些時候遇到這個包裹的問題。
之前有過:
interface SomeInterface {}
export function hello(): SomeInterface {}
這解決了問題:
export interface SomeInterface {}
export function hello(): SomeInterface {}
介面 SomeInterface 在 hello() 的匯出中不可用,這導致我的套件無法正確建置。
希望這對你有幫助。
