[英]Declaration for Module Exporting Object
我有一個編譯並公開兩個CommonJS模塊的項目。 他們每個人一個對象。 然后,我有另一個消耗它們的項目。
項目結構如下:
multi-mod-package
|-mod1
| |-index.js
|-mod2
| |-index.js
|-package.json
multi-mod-consumer
|-index.ts
|-package.json
|-tsconfig.json
以及文件內容:
multi-mod-package / mod1 / index.js
module.exports.default = {
"count": "One"
};
multi-mod-package / mod2 / index.js
module.exports.default = {
"count": "Two"
};
多種消費/ index.ts
import one from "multi-mod-package/mod1";
import two from "multi-mod-package/mod2";
console.log(`${one.count}, ${two.count}, Buckle My Shoes`);
multi-mod-consumer / tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
"noImplicitAny": true
},
"include": [
"index.ts"
]
}
沒有noImplicitAny
,這可以正常工作。 編譯該項目,並按預期輸出“ One, Two, Buckle My Shoes
。 但是,這些模塊沒有類型。 我想啟用noImplicitAny
並為這些模塊輸入正確的類型,因此我試圖為每個模塊編寫聲明文件。 我嘗試了多次declare module
和declare namespace
的迭代,但是在嘗試使用模塊時,我不斷收到“ ...不是模塊”錯誤。
如何為導出對象的模塊編寫聲明文件?
更新
添加兩個定義文件multi-mod-package/mod1/index.d.ts
和multi-mod-package/mod1/index.d.ts
內容declare module "multi-mod-package/mod1";
並declare module "multi-mod-package/mod1";
-分別-擺脫“ ...不是模塊”錯誤。 但是,仍然沒有正確的輸入方式。 one.count
仍然顯示為any
類型。
當我嘗試給模塊一個主體(甚至只是一個空的主體)時,TypeScript抱怨該模塊沒有默認導出。 因此,我仍然需要一種告訴TypeScript模塊是包含count
屬性的對象的解決方案。
您需要將子模塊聲明為單獨的模塊。
在您的輸入內容中(例如, typings/multi-mod-package.d.ts
):
declare module 'multi-mod-package/mod1' {
// typings for mod1
}
declare module 'multi-mod-package/mod2' {
// typings for mod2
}
有關如何輸入內容的信息,您可以查看手冊:
https://www.typescriptlang.org/docs/handbook/declaration-files/introduction.html
TypeScript不會自動進行深層鏈接,因為用於深層鏈接的節點分辨率可能與類型結構不同。
節點深層鏈接是根據package.json的位置解析的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.