網站搜尋

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() 的匯出中不可用,這導致我的套件無法正確建置。

希望這對你有幫助。