2017-06-21 4 views
0

Sagen, ich habe diese in einer Datei:Typoskript Schnittstelle von const

export default { 

    foo: true 
    bar: 'zam', 
    baz: 4 

} 

Dies wird eine .d.ts Datei wie generiert:

declare const _default: { 
    foo: boolean; 
    bar: string; 
    baz: number; 
} 
export default _default; 

meine Frage ist - ist es eine Möglichkeit, eine Schnittstelle von einer dieser Strukturen generieren? Es wäre schön, in der Lage zu sein, die Notwendigkeit zu vermeiden, eine Schnittstelle manuell zu erzeugen.

Dies ist möglicherweise nicht möglich, und in diesem Fall frage ich mich - wie deklariere ich eine Schnittstelle und eine const implementieren diese Schnittstelle? Klingt wie eine dumme Frage, aber ich weiß eigentlich nicht den besten Weg, das zu tun.

Antwort

1

Sie können typeof verwenden, um die Typstruktur eines const-Objekts abzurufen. obwohl

const Foo = { 
    foo: true, 
    bar: 'zam', 
    baz: 4, 
} 

// type FooType = { foo: boolean, bar: string, baz: number } 
type FooType = typeof Foo; 

const FooImpl: FooType = { 
    foo: true, 
    bar: 'zam', 
} // will complain because I'm missing `baz` 

Zwei Anmerkungen zur Sorge:

  • Als FooType ist ein Typ, und nicht eine Schnittstelle, Sie es nicht in allen Orten verwenden, die Sie normalerweise Schnittstellen verwenden würden (zB class MyClass extends FooType) .
  • Die Typen der Schlüssel von const Objekten greifen auf ihren allgemeinen Typ zurück. Während const myInt = 3 den Typ myInt: 3 hat, hätte das Objekt const myObj = { myInt: 3 } den Typ myObj: { myInt: number }.
Verwandte Themen