为什么声明并使用全局函数会编译但无法运行?

时间:2019-01-25 13:06:31

标签: typescript

我有两个打字稿文件。

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

0 个答案:

没有答案