Hur man endast exporterar d.ts från mitt TypeScript-projekt?


För mitt TypeScript-projekt vill jag skapa en d.ts-fil endast för ingångsfilen:

när jag har en index.ts:

import a from './a';
import b from './b';

export default {
   a,
   b
};

när jag kompilerar med ts med konfigurationen tsconfig.json:

{
  "compilerOptions": {
    "outDir": "./lib",
    "declarationDir": "./build",
    "moduleResolution": "node",
    "strictNullChecks": true,
    "experimentalDecorators": true,
    "allowSyntheticDefaultImports": true,
    "noUnusedParameters": true,
    "noUnusedLocals": true,
    "noImplicitAny": true,
    "target": "es6",
    "declaration": true,
    "lib": [
      "dom",
      "es2015",
      "es2016",
    ],
  },
  "include": [
    "packages/index.ts",
    "typings"
  ],
  "exclude": [
    "node_modules",
    "**/__tests__",
    "**/__mocks__",
  ]
}

skulle generera trädfil a.d.ts, b.d.ts, index.d.ts

hur man endast skriver ut index.d.ts

Svar #1

Du kan använda en separat tsc-körning med outFile för att producera en enda .d.ts-fil som har ett declare module-block för varje ursprungligt modul. Du kan göra detta genom att ta bort declaration och declarationDir-alternativen från din ursprungliga tsconfig.json och skapa en separat tsconfig.declaration.json med:

{
  "extends": "./tsconfig.json",
  "compilerOptions": {
    "module": "amd",  // https://github.com/Microsoft/TypeScript/issues/27117
    "declaration": true,
    "emitDeclarationOnly": true,
    "outFile": "build/index.d.ts"
  }
}

Det enda problemet är att TypeScript 3.0.3 felaktigt skickar igenom relativa importvägar såsom ./a till utdata, så för tillfället behöver du ställa in dina modulupplösningsalternativ så att du kan använda icke-relativa importvägar. Problemet har åtgärdats i denna pull-begäran, men åtgärden har inte släppts per 2018-09-15.

Se denna långa tråd för diskussion om andra tillvägagångssätt för deklarationssammanställning.

Relaterade artiklar