我有两个打字稿文件。
button.titleLabel.lineBreakMode = NSLineBreakByTruncatingTail;
button.titleLabel.adjustsFontSizeToFitWidth = false;
,只有3行在 global范围内声明了一个函数(请参见typescript docs):
file1.ts
function hello() : void {
console.log("hello")
}
,其中只有1行使用了我在全局范围内可用的功能:
file2.ts
我可以很好地编译它们:
hello()
但是如果我运行$ tsc file1.ts file2.ts
,则找不到全局函数:
file2.ts
然而,打字稿文档说模块外部的所有内容都是全局的,可以在任何地方使用,并且确实可以编译。甚至Visual Studio Code都可以,并允许我按住CTRL键并单击$ node file2.js
/tmp/file2.js:1
(function (exports, require, module, __filename, __dirname) { hello();
^
ReferenceError: hello is not defined
at Object.<anonymous> (/tmp/file2.js:1:63)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)
中的hello
,将我带到file2.ts
。
但是为什么不运行?
编辑:有一则评论建议这是node.js的局限性。因此,我尝试使用此html文件在浏览器中运行所有这些操作:
file1.ts
这一次确实有效!罪魁祸首似乎是node.js,因为它不能将多个文件作为输入,因此不能在运行时满足打字稿规范的这一部分。
编辑2:我发现的另一种解决方法是,要求编译器使用<script type="text/javascript" src="file1.js"></script>
<script type="text/javascript" src="file2.js"></script>
生成一个单独的.js
文件作为输出,这对于node.js和简单地解决了这种全球范围的情况。
--outFile