1
我們有一個TypeScript庫,我們將發佈到私有NPM環境,並且我們希望在其他TS,ES6或ES5項目中使用該庫。TypeScript默認常量導出
讓庫是NPM包命名爲foo
,其主要文件的工作每桶執行以下操作:
// Index.ts
import Foo from './Core/Foo';
export {default as Foo} from './Core/Foo';
const foo = new Foo();
export default foo;
我們要導出主庫類以及爲應用程序使用的默認實例除非必要,否則不會創建新的。
此外,我們創建了一個獨立的存儲設備的類型定義文件以類似的方式來DefinitelyTyped:
// foo.d.ts
declare namespace Foo {
export class Foo {
public constructor()
// ...methods
}
const foo: Foo;
export default foo;
}
declare module 'foo' {
export = Foo;
}
運行測試的失敗並error TS1063: An export assignment cannot be used in a namespace.
我的目標是什麼的是有這樣的默認實例的用法:
// ES5, browser env
window.Foo.foo.someMethod();
// ES6/TS
import foo from 'foo';
foo.someMethod();
任何想法,如果有一個正確的方法來做到這一點?
編輯
聲明只是模塊@丹尼爾 - rosenwasser提示工作過,但有一個問題,當我們試圖創建一個擴展的第一個新的模塊。
例如:
// bar.d.ts
/// <reference path="../foo/foo.d.ts"/>
import {
Foo
} from 'foo';
declare module 'bar' {
export class Bar extends Foo {
public constructor();
// more methods
}
}
而且它的測試:
// bar-tests.ts
/// <reference path="../foo/foo.d.ts"/>
/// <reference path="./bar.d.ts"/>
import foo, {
Foo
} from 'foo';
import {
Bar
} from 'bar';
namespace TestBar {
{
let result: Foo;
result = foo;
}
{
let result: Foo;
result = new Bar();
}
}
的錯誤,這一次是:
bar/bar-tests.ts: error TS2307: Cannot find module 'bar'.
bar/bar.d.ts: error TS2664: Invalid module name in augmentation, module 'bar' cannot be found.
是的,其實這就是我以前有,但問題來了後,當我試圖創建一個擴展此模塊的新模塊將會將示例添加到問題中... – RecuencoJones
在另一個模塊中,「declare module」foo「{}'語法創建*模塊擴充*。你在另一個模塊中的*原因*是你有一個頂級導入。您可以將導入*移動到「聲明模塊」欄中,以使其正常工作。 –
這工作!我沒有意識到進口聲明應該放在模塊聲明中,謝謝Daniel! – RecuencoJones