javascript node.js typescript typescript2.0
Aquí está el enlace al proyecto de ejemplo

javascript - Importar archivo js con TypeScript 2.0



node.js typescript2.0 (2)

Resumen

Estoy tratando de importar el archivo ".js" desde una ubicación externa (es decir, node_modules ) Estoy tratando de hacer esto usando el patrón del módulo commonjs, sin embargo, la importación no querría trabajar con los tipos de archivos ".js" hasta que agregué " .d.ts archivo "cerca del archivo" .js "en la misma carpeta.

Pero el problema es que no me gustaría afectar a ningún nodo_módulos con mis archivos ".d.ts". Quiero que se ubique en otra carpeta, separada de los node_modules, pero tan pronto como lo hago, el compilador de escritura de tipos produce un error:

Ejemplo

Tengo la siguiente estructura de carpetas:

|- DTS | |- y.d.ts |- main.ts |- y.js

y.js tiene el siguiente contenido

module.export = function (x) { console.log(x); };

ydts tiene el siguiente contenido

export interface Y { (x): any; } declare let y: Y; export default y;

main.ts tiene el siguiente contenido

import * as y from ''./y''

Ahora cuando estoy tratando de compilar main.ts con:

tsc -m commonjs -t ES2015 main.ts

Obtendré un error:

x.ts(1,20): error TS2307: Cannot find module ''./y''.

Pregunta

Cómo importar archivos ".js" y ser capaz de definir sus declaraciones ".d.ts" al tener ambos archivos ubicados en diferentes ubicaciones.

Editar

Aquí está el enlace al proyecto de ejemplo . Asegúrese de utilizar el compilador de TypeScript versión 2.0. Y el comando tsc arriba para ver el error.


pudiendo definir sus declaraciones ".d.ts" al tener ambos archivos ubicados en diferentes ubicaciones.

import sigue el mismo proceso de resolución del módulo cuando se le entrega un archivo .js o .d.ts con archivos relativos.


Nota: La recomendación oficial para probar sus definiciones de tipo toma un enfoque ligeramente diferente al que se presenta a continuación. Creo que el enfoque a continuación es ligeramente mejor, ya que el archivo * .d.ts es prácticamente idéntico al producto final.

Durante la comprobación de tipos (tiempo de compilación), TypeScript funciona con archivos * .ts y (en su mayoría) ignora archivos * .js . Permítame ofrecerle un ejemplo que motive lo que (creo) está proponiendo. Supongamos que existe una biblioteca de JavaScript perfectamente buena que, lamentablemente, no tiene mecanografía (por ejemplo, N3 ). Que se ha instalado a través de npm, por lo tanto:

npm install n3 --save

Esto, como es típico, se agrega a ./node_modules/n3 / ... y project.json. Como se mencionó, las tipificaciones no existen y deben agregarse manualmente. Creo un archivo ./@types/n3.d.ts para este propósito. Para nuestros propósitos, no es particularmente importante cuáles son las definiciones en realidad, pero algo como lo siguiente es un buen comienzo:

declare namespace N3 { } declare module "n3" { export = N3; }

Ahora a tu pregunta. Actualice el '' tsconfig.json '':

... "compilerOptions": { "typeRoots": [ "node_modules/@types", "@types" ], ... "paths": { "*": [ ... "./@types/*" ]

Todavía será necesario lidiar con la resolución en tiempo de ejecución para ubicar los archivos * .js correspondientes, pero esa es una pregunta diferente a la pregunta.

Como referencia, puede encontrar útiles las novedades de TypeScript y este hilo de discusión .

Este enfoque funciona bien cuando se trabaja con variables globales pero no tanto con módulos.

Actualice el '' tsconfig.json '':

... "paths": { "*": [ ... "./@types/*" ], "foo": [ "./@types/foo.d.ts" ] }, ...