Mevcut bir Typescript beyan modülünün iç üyeleri nasıl dışa aktarılır
Diyelim ki, birden fazla üye ihraç eden bir nesneyi içeren bir Node modülünün şeklini tanımlayan bir bildirim dosyam var. Bu dosya foo/index.d.ts konumunda bulunuyor ve şöyle görünüyor:
interface Foo {
bar: () => void;
// ... more members here
}
declare var Foo: Foo;
export = Foo;
Bununla, modülü derlerken normal şekilde talep edebilir ve kullanabilirim:
import * as Foo from 'foo';
Foo.bar();
Ancak, şimdi bunu da yapabilmek istiyorum:
import * as bar from 'foo/bar';
bar();
Bildirim dosyası yollarının, modüllerin, ad alanlarının ve bağlamların tüm olası kombinasyonlarını denedim ama bunu çalıştıramıyorum. En bariz, sezgisel yol, foo/bar/index.d.ts dosyasını oluşturarak şuna sahip olmaktır:
import * as Foo from '..';
export = Foo.bar;
Ama bunu yapmak şu hataya yol açıyor: 'Foo' sadece bir türe atıfta bulunur, ama burada bir ad alanı olarak kullanılıyor.
Hem dış hem de iç üyeleri dışa aktaran modülleri tanımlayan beyan dosyalarını nasıl oluşturabilirim?
Düzenle: @cevek tarafından önerildiği gibi declare module kullanmayı denedim, ancak bu "Foonu bulamıyor" hatasını veriyor:
declare module "foo/bar" {
var bar: Foo.bar;
export = bar;
}
Cevap #1
Modül bildirimlerini kullanabilirsiniz
//foo.d.ts
interface Foo {}
interface Bar {}
declare module 'foo' {
export default Foo
}
declare module 'foo/bar'{
export default Bar
}
Ve başka bir yerden kullan
import * as Foo from 'foo';
import * as Bar from 'foo/bar';
