如何使TypeScript理解RequireJS插件的导入路径,如";插件/路径/to/foo"



例如,假设我们编写

import template from 'hb!./foo.hb'

我们如何让TypeScript理解这一点(或者忽略它,因为RequireJS会处理这一点)?

添加环境模块声明将使TypeScript了解该模块,并防止编译器错误。

来自关于模块分辨率的TypeScript文档:

编译器将尝试查找表示导入模块的文件。为此,编译器遵循两种不同策略之一:经典或节点。

如果这不起作用,并且模块名称是非相对的,那么编译器将尝试定位环境模块声明。

在您的情况下,您可以添加环境模块定义:

//foo.d.ts
declare module "hb!./foo.hb" {
export default class template { }
}

然后你可以编译成:

tsc --module amd .test.ts .foo.d.ts

得到这个输出:

define(["require", "exports", "hb!./foo.hb"], function (require, exports, foo_hb_1) {
"use strict";
console.log(foo_hb_1["default"]);
});

这里重要的是,环境模块声明只是告诉TypeScripttemplate将是什么样的东西。正如你从编译的输出中看到的,你的模块加载器实际上将负责真正的工作。

更新

可以在模块声明中使用通配符。所以你可以声明一个模块,比如:

declare module "hb!*" {
export default class template { }
}

现在您可以导入任何与hb!*:匹配的内容

import template from 'hb!./foo.hb'
import template from 'hb!./bar.hb'
import template from 'hb!./baz.hb'

最新更新