【发布时间】:2020-06-02 13:06:55
【问题描述】:
如果我有一个像这样的 JavaScript index.js 文件:
function foo(val) {
console.log(val);
}
还有一个 index.html 像这样的 HTML 文件:
...
<script src="./index.js"></script>
<div id="container">
<label>bar
<input type="radio" name="radio" value="bar" onchange="foo(value);"/>
</label>
<label>baz
<input type="radio" name="radio" value="baz" onchange="foo(value);"/>
</label>
...
当我检查单选按钮时,这将记录 bar 或 baz。
我想调用在 index.ts TypeScript 文件中定义的foo(value),如下所示:
let foo = (value: string): void => {
console.log(value);
};
在index.html中我把<script src="./index.js"></script>改成<script src="./src/index.ts"></script>,然后我用parcel构建app,但是构建出来的文件不能调用函数,记录referenceError: setLayer is not defined .
我知道理论上浏览器对 TypeScript 一无所知,只知道 JavaScript,但是在我的 dist 目录中使用 parcel 编译后,我看到一堆 *js 文件,我认为其中一个可能包含编译后的文件foo()函数。
所以问题是:如何像处理 JS 文件一样从 HTML 输入 onchange 属性调用 TS 文件内的函数?
最后但同样重要的是:为了构建我的应用程序,我调用了parcel start(甚至是parcel run build),而我的package.json 看起来像这样:
{
"name": "app_test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start:build": "tsc -w",
"start": "parcel index.html",
"build": "parcel build --public-url . index.html"
},
"author": "",
"license": "ISC",
"dependencies": {
},
"devDependencies": {
"parcel-bundler": "^1.12.4",
"typescript": "^3.7.5"
}
}
【问题讨论】:
-
您不能直接从 .ts 文件执行函数。它只是程序的“源代码”,必须先“编译”成 JavaScript(并保存为 .js 文件)才能使用。
标签: javascript html typescript