Typescript//<;引用路径=“…”&引用>;:为什么';这对我不管用吗?
我写了以下文件: main.ts:Typescript//<;引用路径=“…”&引用>;:为什么';这对我不管用吗?,typescript,Typescript,我写了以下文件: main.ts: ///<reference path="./external.ts"/> hello(); 我将这两个文件编译为javascript,并通过以下命令运行它们: $node main.js 我希望调用函数“hello”。但是,不,我有一个错误: ReferenceError:未定义hello 关于三重斜杠指令()的教程说: 编译器对输入文件执行预处理传递以解析 所有三重斜杠引用指令。在这个过程中,额外的 将文件添加到编译中 所以我不明白为什么不能
///<reference path="./external.ts"/>
hello();
我将这两个文件编译为javascript,并通过以下命令运行它们:
$node main.js
我希望调用函数“hello”。但是,不,我有一个错误:
ReferenceError:未定义hello
关于三重斜杠指令()的教程说:
编译器对输入文件执行预处理传递以解析
所有三重斜杠引用指令。在这个过程中,额外的
将文件添加到编译中
所以我不明白为什么不能读取external.ts文件中的函数 该aproach仅在浏览器中有效。使用节点时,需要导入(需要)文件才能使用它 您需要执行以下操作:
// external.ts
export var hello = function() {
console.log("hello");
}
然后像这样使用它:
// main.ts
import { hello } from "./external";
hello();
此外,在编译时,您需要为节点编译它:
tsc -m commonjs ./main.ts
老实说,整个问题毫无意义。 参考文件的目的是说明什么是函数、类型或类型 接口在以下程序中可用 应该更多地关注声明而不是实现。 一个简单的例子是: 如果在
main.ts
中,您会得到:
console.log('hi')
如果没有@types/node,编译将失败,因为编译器不知道它是什么控制台。
这就是我们为编译器提供参考文件的原因:
哦,有一个控制台对象get是用log方法定义的
在您的示例中,您可以在hello.d.ts中声明:
declare function hello(): void;
那么在hello.ts中呢
/// <reference path="./hello.d.ts" />
hello();
也就是说我很高兴,
它知道hello是一个函数,可以这样调用
但是,如果您与
node hello.js
ReferenceError: hello is not defined
您将得到ReferenceError,因为运行时节点引擎未实现hello()函数。
试用
它由引擎实现,有助于理解。不幸的是,它在浏览器中不起作用。您知道如何在浏览器中解决此问题吗?在浏览器中,您需要确保使用script标记加载两个脚本,并确保在'main.js'之前加载
external.js
,然后我会收到错误:“未捕获引用错误:未定义导出”在将其编译到浏览器时,不要使用-m commonjs
或类似的东西。
tsc hello.ts
node hello.js
ReferenceError: hello is not defined
console.log('hello')