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);
