requirejs - ¿Cómo utilizar una biblioteca externa sin mecanografiar de mecanografiado sin.d.ts?
tsconfig (2)
Los he definido en mi archivo .html:
<script type="text/javascript" src="bower_components/tree.js/tree.min.js"></script>
<script type="text/javascript" src="bower_components/q/q.js"></script>
<script type="text/javascript" src="test.js"></script>
Luego en test.js:
var myTree = Tree.tree({})
Pero los errores mecanografiados dicen: "No se puede encontrar el nombre ''Árbol''"
También intenté compilar con
--module amd
y colocar
import Tree = require("model/tree");
en la parte superior del archivo test.js, pero vuelve a producirse un error:
Cannot find external module ''model/tree''.
sin embargo, claramente debería ser una importación válida, vea aquí dónde 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 quiera usar, ¿es eso en serio lo que Typecript quiere que haga?
No quiero escribir archivos .d.ts para cada archivo javascript externo que quiera usar, ¿es eso en serio lo que Typecript quiere que haga?
No. La solución más simple / rápida es simplemente decirle 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 compilador que hay algo llamado
Tree
que administrará y que no le importa la seguridad de la letra 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 sintaxis mucho más simple que otras herramientas de veficiación de JS que debería escribir para declarar su uso de variables que no están presentes en su código.
Actualizar
interface ITree {
.. further methods and properties...
}
interface ITreeFactory {
tree(input: { [key: string]: any }): Itree
};
declare var Tree: ITreeFactory; // magic...
Puede definir ''requerir'' a sí mismo y usar la función de dependencia amd no documentada de TypeScript:
/// <amd-dependency path="model/tree" />
declare var require:(moduleId:string) => any;
var Tree = require("model/tree");
La directiva ''amd-dependency'' le indicará al compilador 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 de TypeScript adecuadas para su código existente, no se le proporcionará ninguna información de tipo, 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 dinámica de JS dentro de otro código TS.