簡體   English   中英

環境 Typescript 定義未捆綁在庫中

[英]Ambient Typescript Definitions Not Bundled in Library

我正在使用 TSDX 工具來構建一個 react-typescript 庫。 我在我的@types/目錄中導出了許多類型,當我在應用程序中毫無問題地使用它們時,編譯器清楚地選擇了這些類型。

然而,在我的構建過程中,它們並沒有被復制到我的 output 包中,這讓我感到驚訝,因為它們是通過代碼引用的(確實被正確地捆綁了)。

// tsconfig.json
{
  "include": ["src", "types", "test"],
  "compilerOptions": {
    "target": "es5",
    "module": "esnext",
    "lib": ["dom", "esnext"],
    "importHelpers": true,
    "declaration": true,
    "sourceMap": true,
    "rootDir": "./",
    "strict": true,
    "noImplicitAny": false,
    "strictNullChecks": true,
    "strictFunctionTypes": true,
    "strictPropertyInitialization": true,
    "noImplicitThis": true,
    "alwaysStrict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noImplicitReturns": false,
    "noFallthroughCasesInSwitch": true,
    "moduleResolution": "node",
    "baseUrl": "./",
    "paths": {
      "*": ["src/*", "node_modules/*"]
    },
    "jsx": "react",
    "esModuleInterop": true
  }
}

這實際上是設計使然,信不信由你。

您可以在 tsconfig.json 中定義類型的位置,並且預計它們總是在最終構建中(因為它們沒有被移動)。 即給定這個結構:

src/app.ts
types/app.d.ts

Typescript 期望您發布的構建類似於:

build/app.js
build/app.d.ts
types/app.d.ts

為此,您可以在 tsconfig 中定義環境類型的路徑

{
    baseUrl: "./",
    paths: [
        "my-app": "./types/app.d.ts"
    ]
}

或添加一個包含目錄中所有類型的 typeRoot,小心這一點,它將覆蓋任何現有的 typeRoots,例如node_modules/@types的那些,因此您需要重新聲明它們。

{
    typeRoots: ['./types', 'node_modules/@types']
}

如果您已聲明路徑,則使用my-app的導入來使用類型。

預計您的最終構建將包含根目錄中的types目錄,該目錄在您的tsconfig.json中定義。

我懷疑您將.d.ts文件包含在您的應用程序源目錄中,因此不希望它能夠用於生產構建。 在這種情況下,您需要手動將其移動到構建中所需的位置,或者根據您的構建工具使用其他插件自動化它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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