Typescript//<;引用路径=“…”&引用>;:为什么';这对我不管用吗?

Typescript//<;引用路径=“…”&引用>;:为什么';这对我不管用吗?,typescript,Typescript,我写了以下文件: main.ts: ///<reference path="./external.ts"/> hello(); 我将这两个文件编译为javascript,并通过以下命令运行它们: $node main.js 我希望调用函数“hello”。但是,不,我有一个错误: ReferenceError:未定义hello 关于三重斜杠指令()的教程说: 编译器对输入文件执行预处理传递以解析 所有三重斜杠引用指令。在这个过程中,额外的 将文件添加到编译中 所以我不明白为什么不能

我写了以下文件:

main.ts:

///<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')