簡體   English   中英

模塊導出對象聲明

[英]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 moduledeclare namespace的迭代,但是在嘗試使用模塊時,我不斷收到“ ...不是模塊”錯誤。

如何為導出對象的模塊編寫聲明文件?

更新

添加兩個定義文件multi-mod-package/mod1/index.d.tsmulti-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM