¿Cómo utilizar una biblioteca externa sin escritura mecanográfica sin .d.ts?

Los he definido en mi archivo .html:

   

Luego en test.js:

  var myTree = Tree.tree({}) 

Pero los errores de Typescript dicen: “No se puede encontrar el nombre ‘Árbol'”

También intenté comstackr con --module amd y colocar la import Tree = require("model/tree"); en la parte superior del archivo test.js, pero se repite de nuevo: Cannot find external module 'model/tree'. sin embargo, claramente debe ser una importación válida, consulte aquí donde se definió: https://github.com/marmelab/tree.js/blob/master/src/main.js

No quiero escribir archivos .d.ts para cada archivo javascript externo que quiero usar, ¿es eso lo que Typescript quiere que haga?

No quiero escribir archivos .d.ts para cada archivo javascript externo que quiero usar, ¿es eso lo que Typescript quiere que haga?

No. La solución más simple / más rápida es simplemente decir que hay algún Tree variable por ahí. Esto es tan simple como:

 declare var Tree:any; // Magic var myTree = Tree.tree({}) 

TypeSafety es una escala móvil en TypeScript. En este caso, solo le está diciendo al comstackdor que hay algo llamado Tree que administrará y que no le importa mucho typesafety más allá del hecho de que está allí .

Más

En mi humilde opinión: La línea declare var Tree:any; es una syntax mucho más simple que otras herramientas de veficiación de JS que te hacen escribir para declarar el uso de variables que no están presentes en tu código.

Actualizar

 interface ITree { .. further methods and properties... } interface ITreeFactory { tree(input: { [key: string]: any }): Itree }; declare var Tree: ITreeFactory; // magic... 

Puede definir ‘requiera’ usted mismo y usar la característica de dependencia de AMD no documentada de TypeScript:

 ///  declare var require:(moduleId:string) => any; var Tree = require("model/tree"); 

La directiva ‘amd-dependency’ le dirá al comstackdor que incluya su módulo para “definir” argumentos en el código generado: vea una muestra aquí .

También puede consultar un artículo muy bueno que explica cómo usar TypeScript con RequireJS.

Pero tenga en cuenta que sin escribir las definiciones propias de TypeScript para su código existente, no se le proporcionará ningún tipo de información, por lo que no obtendrá verificaciones de seguridad de tipo, finalización avanzada de código en herramientas, etc. Entonces, su ‘Árbol’ en realidad será del tipo ‘cualquiera’, y en realidad será una pieza JS dinámica dentro de otro código TS.