javascript - ¿Cómo crear un paquete npm con archivos de definición?
Cómo crear un paquete NPM con archivos de definición donde se declaran solo interfaces en archivos *.ts.
Supongamos que tenemos dos interfaces y una definición de clase:
export interface A {
id: number;
}
export interface B {
name: string;
}
export class C {
}
Necesito empaquetar estos archivos *.ts en un paquete npm, ¿cómo puedo hacer eso? ¿Debería exportarlos en index.ts?
Mi package.json es:
{
"name": "npm",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
Mi tsconfig.json es:
"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
}
Dentro de index.ts hay:
import { A } from "./a";
import { B } from "./b";
import { C } from "./c";
Donde './a', './b', './c' son archivos con declaraciones de interfaces y clases.
Cuando lo construyo en el archivo index.js usando el comando: tsc index.ts, entonces no puedo acceder a las interfaces usando el módulo index.js en otros proyectos (npm install)
Respuesta #1
Para agrupar los tipos con su paquete, hay dos cosas específicas que debe hacer:
- Establece
"declaration"entrueentsconfig.json. Esto le indica a TypeScript que genere archivos*.d.ts. - Establece
"types"enpackage.json. Esto le dice a TypeScript dónde encontrar los archivos*.d.tsgenerados.
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"
}
}
Aquí tienes un ejemplo funcional para ti en GitHub. Todo lo anterior y más detalles están ocultos en la documentación.
Respuesta #2
Existen dos métodos para publicar archivos de definición:
- empaquetado con tu paquete npm,
- o publicar en la organización @types en npm.
Aquí está la documentación para ayudarte con eso
