javascript - TypeScript'in "plugin!./path/to/foo" gibi RequireJS eklentileri için import yollarını nasıl anlamasını sağlarım?


Örneğin, diyelim ki yazıyoruz

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

TypeScript'in bunu anlamasını nasıl sağlarız (veya yok saymasını, çünkü RequireJS bunu halledecek)?

Cevap #1

Bir ortam modülü bildirimi eklemek, TypeScript'in modülü bilmesini sağlayacak ve derleyici hatasını önleyecektir.

TypeScript belgelerinden modül çözümlemesi ile ilgili:

Derleyici, içe aktarılan modülü temsil eden bir dosya bulmaya çalışacaktır. Bunu yapmak için derleyici iki farklı stratejiden birini izler: Klasik veya Node.

Eğer bu işe yaramazsa ve modül adı göreli değilse, derleyici bir ortam modülü bildirimi bulmaya çalışacaktır.

Sizin durumunuzda bir ortam modül tanımı ekleyebilirsiniz:

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

O zaman şu şekilde derleyebilirsiniz:

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

Ve bu çıktıyı al:

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

Burada önemli olan, ortam modülü bildiriminin sadece TypeScript'e template'in ne tür bir şey olacağını söylemesidir. Derlenmiş çıktıya baktığınızda görebileceğiniz gibi, gerçek işten aslında modül yükleyiciniz sorumlu olacaktır.

Güncelleme

Modül bildirimlerinde joker karakterler kullanmak mümkündür. Bu nedenle bir modülü şöyle bildirebilirsiniz:

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

Artık hb!* ile eşleşen herhangi bir şeyi ithal edebilirsiniz:

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