在TypeScript中引用外部模块

时间:2015-01-26 14:37:36

标签: typescript reactjs

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

转换为TypeScript时,我有一些尚未转换的模块。在TypeScript Handbook中,它表示我可以在为其指定类型定义文件时引用外部模块。

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

的全局类型定义文件
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')时,编译步骤有效,但模块加载器无法找到该文件,因为我没有它的全局别名。

有什么方法可以解决这个问题吗?

3 个答案:

答案 0 :(得分:9)

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

declare module 'A' { //...

使用以下方法导入它(无论您在哪里导入它):

import a = require('A');

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

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

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

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

文件./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注释。

答案 1 :(得分:1)

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

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

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

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

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

答案 2 :(得分:0)

当使用typescript作为引用时,我试图回避相对路径。也许它只是我,但我发现它有缺陷(用于参考)。

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

这使您可以快速调试问题(打字稿编译错误很烦人)。

希望这有帮助。