通配符模块声明在typescript 2.x.x中不起作用,为什么?

时间:2016-10-26 15:30:38

标签: typescript

为什么这个方法声明:declare module "*!text" {}不起作用?

目标 - 在变量中使用文件内容:

import layout = require("/js/views/layouts/wnd.html!text");

左右:

import layout from "/js/views/layouts/wnd.html!text";

如果我们按如下方式做声明:declare module "/js/views/layouts/wnd.html!text" {} - 一切正常,但如果使用此方法"*!text",我会收到错误cannot find module。如何强制使用此模板:"*!text"

参考to an example of the documentation

我将systemJS与plug-in for download text files

一起使用

打字稿版本 - 2.0.6

1 个答案:

答案 0 :(得分:2)

由于某种原因,

Typescript在转换为js文件时不会删除此特殊规则“!text”(即使将moduleResolution设置为“node”) transpiled js file

因此它导致文件路径解析失败。 (使用typescript v2.2.1测试,node.js v6.9.5)

文件需要更新。

通过添加自定义文件扩展名,这是一个可行的版本:

index.d.ts

declare module "*.html" {
    const value: string;
    export default value;
}

将nodejs模块扩展扩展为将* .html读入纯文本

require.extensions['.html'] = function(module, filename) {
    module.exports = fs.readFileSync(filename, 'utf8');
}

从你的例子来看,它应该是这样的:

import * as layout from "./js/views/layouts/wnd.html";
console.log(layout);