Wildcard-moduldeklaration fungerar inte i TypeScript 2.x.x, varför?


Varför fungerar inte denna metoddeklaration: declare module "*!text" {}?

Målet - att använda filinnehåll i en variabel:

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

eller så:

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

Om vi gör deklarationen på följande sätt: declare module "/js/views/layouts/wnd.html!text" {} - fungerar allt, men om denna metod används "*!text" får jag ett fel cannot find module. Hur tvingar jag denna mall att fungera: "*!text"?

Referensen till ett exempel på dokumentationen

Jag använder systemJS med ett plug-in för att ladda ner textfiler

Typescript-version - 2.0.6

Svar #1

Typescript tar av någon anledning inte bort denna specialregel "!text" när den transpileras till js-fil, (även med moduleResolution inställt på "node")

så det orsakar att filvägsupplösning misslyckas. (testat med typescript v2.2.1, node.js v6.9.5)

Dokumenten behöver uppdateras.

Här är en fungerande version genom att lägga till anpassade filändelser:

index.d.ts

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

Utöka Node.js-modulutvidgningar för att läsa *.html som ren text

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

Och från ditt exempel borde det fungera på detta sätt:

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