TypeScript 1.5: Exportera standard som implementerar ett gränssnitt


I TypeScript 1.5 har jag följande gränssnitt i IFoo.ts:

// IFoo.ts
interface IFoo<T> {
    bar(): T;
}

Och en implementering i FooString.ts:

// FooString.ts
export default {
    bar: () => 'Hello world'
}

Hur kan modulen FooString.ts deklarera objektliteralet som den exporterar som en implementation av IFoo<sring>? Utan en deklaration kontrolleras inte implementationen av interfacet av kompilatorn, och att förlora kompileringstidskontrollen av FooString-modulen skulle vara problematiskt.

Svar #1

Typecasting i 1.5 kommer att bevara kontrollen under kompileringstiden, så detta kommer att fungera:

export default <IFoo<string>> {
    bar: () => 'Hello world'
}

Svar #2

export var defaults:IFoo<string> = {
    bar: () => 'Hello world'
}