node.js - pagina - No se puede usar requireJS y Node''s Require en el mismo proyecto de TypeScript
typescript oficial (2)
Al final, lo que necesitaba era la capacidad de require()
contenido JS compilado sobre la marcha por el servidor, lo que no parece funcionar con el paquete web .
Para suprimir los errores del compilador de mecanografía en la pregunta original, comenté esta línea desde require.d.ts
(el archivo de declaración RequireJS):
declare var require: Require;
y utilicé el truco {foo:bar}[''f''+''oo'']
para hacer que tsc
''olvide'' el tipo de variable de require
ambiente cuando se lo asigna a la variable requirejs
tipeada, así:
var requirejs:Require; // requirejs
if(typeof module !== ''undefined'' && module.exports){
// We''re in a Node process
requirejs = require(''requirejs'');
}else{
// We''re in an AMD module in the browser:
requirejs = {require:require}[''req''+''ire''];
}
// use requirejs for dynamic require statements
requirejs(gather_requirements(),do_things);
Tengo un proyecto mecanografiado dirigido tanto a Node como al navegador. Estoy usando Node''s require()
en algunos scripts y necesito el require()
jS en otros. Mi directorio de proyecto se ve así:
myProject
/-- a.ts
/-- b.ts
/-- node.d.ts
/-- require.d.ts
donde a.ts
contiene:
/// <reference path="./node.d.ts" />
var cp = require(''child-process'');
var a = ''hello world''
export = a
y b.ts
contiene:
/// <reference path="./require.d.ts" />
require(''hello'',function(x){console.log(''world'')});
var b = ''hello world''
export = b
y donde node.d.ts
y node.d.ts
se obtienen de DefinitlyTyped .
Cuando compilo mi proyecto, obtengo estos errores:
b.ts(2,1): error TS2346: Supplied parameters do not match any signature of call target.
require.d.ts(396,13): error TS2403: Subsequent variable declarations must have the same type. Variable ''require'' must be of type ''NodeRequire'', but here has type ''Require''.
Utilizo este idioma para determinar qué módulos cargar, por lo que no estoy cargando un módulo de nodo en el navegador o viceversa.
if(typeof module !== ''undefined'' && module.exports){
// We''re in a Node process
}else{
// We''re in an AMD module in the browser:
}
¿Hay alguna forma de utilizar ambos archivos .d.ts
en el mismo proyecto? Parece que usarlos en módulos separados no es suficiente.
¿Hay alguna forma de utilizar estos dos archivos .d.ts en el mismo proyecto?
Recomiendo ir con commonjs
todas partes. Eso es lo que la comunidad React ha encabezado y es un flujo de trabajo mucho más simple. Simplemente use CommonJS + webpack (para obtener lazy require.ensure
desde aquí ). 🌹
También hay un inicio rápido para TypeScript en el entorno del navegador .