Javascript 使用script.js从Typescript加载模块
我希望能够使用typescript从cdn加载外部依赖项,如下所示:Javascript 使用script.js从Typescript加载模块,javascript,typescript,Javascript,Typescript,我希望能够使用typescript从cdn加载外部依赖项,如下所示: declare var $script: any; $script(["//cdnjs.cloudflare.com/ajax/libs/react/15.2.1/react.min.js", "//cdnjs.cloudflare.com/ajax/libs/react/15.2.1/react-dom.min.js" ], () => { import * as React from
declare var $script: any;
$script(["//cdnjs.cloudflare.com/ajax/libs/react/15.2.1/react.min.js",
"//cdnjs.cloudflare.com/ajax/libs/react/15.2.1/react-dom.min.js"
], () => {
import * as React from "react";
import * as ReactDOM from "react-dom";
ReactDOM.render(
<Hello compiler="TypeScript" framework="React" />,
document.getElementById("example")
);
});
…如果我们将导入语句移到文件的顶部,它们将失败,因为依赖项尚未加载
有没有一种方法可以使用scriptjs根据需要通过typescript加载依赖项?当使用模块加载器加载脚本时,应该使用您正在使用的
import
语句(amd
,system
,等等),但是,既然您没有这样做,那么您需要使用reference
标记来告诉编译器在哪里找到要响应的定义:
/// <reference path="react.d.ts" />
/// <reference path="react-dom.d.ts" />
$script(["//cdnjs.cloudflare.com/ajax/libs/react/15.2.1/react.min.js",
"//cdnjs.cloudflare.com/ajax/libs/react/15.2.1/react-dom.min.js"
], () => {
ReactDOM.render(
<Hello compiler="TypeScript" framework="React" />,
document.getElementById("example")
);
});
这有助于编译(无错误),但会产生以下结果:
var React = require("react");
var ReactDOM = require("react-dom");
这对您没有帮助,因为您在运行时没有require
我还没有设法让它工作,我写这个答案只是为了通过我尝试过的,并给你一个选择:使用模块系统。例如,使用: 配置(以html为例): 然后在
.tsx
文件中:
import React = require("react");
import ReactDOM = require("react-dom");
ReactDOM.render(
<Hello compiler="TypeScript" framework="React" />,
document.getElementById("example")
);
import React=require(“React”);
导入ReactDOM=require(“ReactDOM”);
ReactDOM.render(
,
document.getElementById(“示例”)
);
模块系统将按照正确的顺序为您加载内容,导入过程非常简单。您不必使用SystemJS,还有其他模块加载器。当使用模块加载器加载脚本时,应使用您正在使用的
import
语句(amd
,system
,等等),但是,既然您没有这样做,那么您需要使用reference
标记来告诉编译器在哪里找到要响应的定义:
/// <reference path="react.d.ts" />
/// <reference path="react-dom.d.ts" />
$script(["//cdnjs.cloudflare.com/ajax/libs/react/15.2.1/react.min.js",
"//cdnjs.cloudflare.com/ajax/libs/react/15.2.1/react-dom.min.js"
], () => {
ReactDOM.render(
<Hello compiler="TypeScript" framework="React" />,
document.getElementById("example")
);
});
这有助于编译(无错误),但会产生以下结果:
var React = require("react");
var ReactDOM = require("react-dom");
这对您没有帮助,因为您在运行时没有require
我还没有设法让它工作,我写这个答案只是为了通过我尝试过的,并给你一个选择:使用模块系统。例如,使用: 配置(以html为例): 然后在
.tsx
文件中:
import React = require("react");
import ReactDOM = require("react-dom");
ReactDOM.render(
<Hello compiler="TypeScript" framework="React" />,
document.getElementById("example")
);
import React=require(“React”);
导入ReactDOM=require(“ReactDOM”);
ReactDOM.render(
,
document.getElementById(“示例”)
);
模块系统将按照正确的顺序为您加载内容,导入过程非常简单。您不必使用SystemJS,还有其他模块加载程序可以使用。这听起来是一个很好的方法。不完全是我要求的,但它达到了我想要的结果。这将允许我只从html:systemjsconfig.js和您的_MAIN_FILE.js引用2个文件。systemjsconfig.js可以被应用程序中的所有页面共享。这听起来是一个很好的方法。不完全是我要求的,但它达到了我想要的结果。这将允许我只从html:systemjsconfig.js和您的_MAIN_FILE.js引用2个文件。systemjsconfig.js可以由应用程序中的所有页面共享。