如何创建带有定义文件的NPM软件包,其中仅声明了*.ts文件中的接口(interface)。

假设我们有两个接口(interface)和一个类定义:

export interface A {
 id: number;
}

export interface B {
 name: string;
}

export class C {
}

我需要将这些*.ts文件打包在软件包npm中,该怎么做?我应该将它们导出为index.ts吗?

我的package.json是:
{
  "name": "npm",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

我的tsconfig.json是:
"compilerOptions": {
   "target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
   "module": "commonjs",
   "strict": true,
   "esModuleInterop": true,
   "forceConsistentCasingInFileNames": true
}

index.ts里面有:
import { A } from "./a";
import { B } from "./b";
import { C } from "./c";

其中'./a', './b', './c'是带有接口(interface)和类声明的文件。

当我使用命令:index.js将其构建到tsc index.ts文件时,则无法在其他项目中使用index.js模块访问接口(interface)(npm install)

最佳答案

要将这些类型与您的软件包捆绑在一起,您需要做两件事:

  • "declaration"中设置tsconfig.json这告诉TypeScript生成*.d.ts文件。
  • "types"中设置package.json这告诉TypeScript在哪里找到生成的*.d.ts文件。

  • tsconfig.json
    {
      "compilerOptions": {
        "target": "es5",
        "module": "commonjs",
        "strict": true,
        "esModuleInterop": true,
        "forceConsistentCasingInFileNames": true,
        "declaration": true  <----------------------
      }
    }
    

    package.json
    {
      "name": "my-package",
      "version": "1.0.0",
      "main": "index.js",
      "types": "index.d.ts", <----------------------
      "license": "ISC",
      "devDependencies": {
        "typescript": "^3.8.3"
      }
    }
    

    这是一个working example for you on GitHub。以上所有以及更多详细信息都是hidden in the documentation

    关于javascript - 如何使用定义文件创建npm包?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60839051/

    10-16 21:05