我有一个应用程序,我想逐步转换为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')
时,编译步骤有效,但模块加载器无法找到该文件,因为我没有它的全局别名。
有什么方法可以解决这个问题吗?
答案 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
这使您可以快速调试问题(打字稿编译错误很烦人)。
希望这有帮助。