我一直遇到這種情況:我將回呼作為引數傳遞給另一個檔案中的函式或類。不幸的是,我無法匯入回呼的簽名,因為它來自父級,我最終會得到一個回圈參考。
檔案腳.ts
import fn from "./fn"
class Foo {
bar() {
fn( this.baz.bind(this) )
}
baz() { }
}
檔案 fn.ts
import Foo from "./Foo" // circular reference
export default function ( callback: typeof Foo.prototype.baz ) { }
== 編輯 ==
來自@youdateme 鏈接文章的想法:將其分成更小的部分:
腳
import fn from "./fn"
import abstractFn from "./abstractFn"
class Foo {
bar() {
fn( this.baz.bind(this) )
}
baz(...args: Parameters<typeof abstractFn>) {
abstractFn(...args)
}
}
fn.ts
// import Foo from "./Foo" // circular reference
import abstractFn from "./abstractFn"
export default function ( callback: typeof abstractFn ) { }
uj5u.com熱心網友回復:
我猜你正在編譯到 CommonJS,這就是為什么你不能使用回圈依賴。
當然,最好避免它們,這就是為什么你可以嘗試這篇文章來修復它們。
ESM 內置了對頂級等待和回圈依賴的支持,所以我認為切換會解決它。
更改編譯器選項以編譯為es6模塊或更高版本。
然后添加"type": "module"到您的 package.json 以指定您正在使用 ESM。
重新編譯你的 TypeScript 并運行(ESM 需要 node >14 iirc)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/428693.html
標籤:打字稿
上一篇:如何回傳傳入的型別的嵌套型別
