En un proyecto de JavaScript, ¿cómo puedo agregar objetos de configuración escritos que puedo pasar a un constructor y que funcionan con la finalización del código VSCode?
Aquí hay una captura de pantalla de la biblioteca Three.js que proporciona la funcionalidad a la que me refiero. Estoy tratando de replicar esto en mi propio proyecto de JavaScript.
Esto es lo que probé. Ambos archivos están en el mismo directorio. Estoy usando Webpack como paquete, sin configuración de mecanografiado en absoluto. El archivo .d.ts parece ser ignorado.
¿Qué debo hacer para que esto funcione? Agregar un archivo de configuración? ¿Cambiar la configuración del paquete web?
// Person.js export class Person { constructor(parameters) { this.name = parameters.name; this.age = parameters.age; } }
// Person.d.ts export interface PersonParameters { name: string, age?: number } export class Person { constructor(parameters: PersonParameters); }
TypeScript puede ser complicado de configurar para los recién llegados y si solo lo va a usar para declaraciones de tipo, realmente no vale la pena. Así que podrías probar el viejo JSDoc:
/** * @typedef {object} PersonConfig * @prop {string} name * @prop {number} age */ /** * A human being */ export class Person { /* * Mimics the birth of a new person * @param {PersonConfig} parameters */ constructor(parameters) { this.name = parameters.name; this.age = parameters.age; } }
Probé tu ejemplo y funciona bien como archivos fuente. Así que supongo que está preguntando cómo enviar las definiciones para que los usuarios finales puedan usarlas. Hay varias formas de hacerlo.
Cree archivos d.ts
y use CopyWebpackPlugin para copiarlos en la carpeta dist. Puede crear un solo archivo d.ts
o crear uno para cada archivo js, es posible que se necesite un punto de entrada como index.d.ts
.
Reescriba la biblioteca usando TypeScript😄 y genere tipos usando ts-loader
o tsc
directamente, configurando la declaration
y outDir
en tsconfig.json
.
También es posible crear un pr para DefinitelyTyped para que los usuarios puedan instalar los tipos por separado a través de @types/<your-lib>
como lo hace three.js. Pero dado que es su propia biblioteca, debe ser exagerada.
Vuelva a cargar VS Code si no se aplica inmediatamente después de copiar las definiciones en la carpeta de destino.