在 TypeScript 中引用外部模块

Reference External Modules in TypeScript

我有一个应用程序,我想逐步将其转换为 TypeScript。目前我们正在使用 browserify 生成一个包。

在转换为 TypeScript 时,我有一些模块尚未转换。在 TypeScript Handbook 它说我可以引用外部模块,当为它指定一个类型定义文件时。

我有一个模块 A.js 尚未转换为 TypeScript。我有一个定义

的全局类型定义文件
declare module "A" {
    export function foo();
    export function bar();
}

我正在这样导入我的模块:

///<reference path="../../typings/NotYetConvertedModules.d.ts" />
import A = require('../someFolder/A');

编译时我得到

error TS2307: Cannot find external module '../someFolder/A'

当用 require('A') 要求它时,编译步骤有效但模块加载器找不到文件,因为我没有它的全局别名。

有什么办法可以解决吗?

假设您正在使用外部模块(这意味着模块 ID 取决于文件名)

而不是写成../../typings/NotYetConvertedModules.d.ts

declare module "A" {
    export function foo();
    export function bar();
}

你应该简单地写成../someFolder/A.d.ts

export function foo();
export function bar();

当您在引号中声明模块名称时,引号中的名称将成为别名。所以当你写...

declare module 'A' { //...

您使用以下方式导入它(无论您在何处导入):

import a = require('A');

例如,这在为 node.js 模块创建定义时很有用。

您不能将字符串别名与相对路径一起使用,因此您不能:

declare module '../SomeFolder/A' { //...

但是您可以在适当的位置(SomeFolder)放置一个名为a.d.ts的定义文件。

文件 ./SomeFolder/a.d.ts 如下所示:

declare module A {
    export function foo();
    export function bar();
}

export = A;

文件 ./Scripts/AnotherFolder/example.ts 如下所示:

import A = require('../../SomeFolder/A'); 

您将需要根据您的确切文件夹结构调整路径,但您可以看到这个想法。重要的是,从与定义文件相同的文件夹导入模块时不需要 reference 注释。

在使用打字稿作为参考时,我尽量避免使用相对路径。也许只有我一个人,但我发现它有问题(供参考)。

在您的 require.js 配置中,您可以将请求字符串映射到预定义的文件列表或一些类似的系统。例如 require("document.text") 可以看到 "document" 并将其映射到 src/net/unicorns/document/text.js

这也让您可以快速调试问题(typescript 编译器错误很烦人)。

希望对您有所帮助。