2017-12-06 3 views
0

ich versuche, einen Typ zu schaffen, die einen variablen Wert als EigenschaftString Variablenwert als Eigenschaft in einer Art

Zum Beispiel hat:

const myProp: string = 'my prop'; 
type Foo ={ 
    [myProp]: string 
}; 

i erwartet, dass ich tun kann:

const test: Foo = { 
    [myProp] = myProp 
} 

Aber erhalten Fehler:

[ts] A compu Der Name der ted-Eigenschaft in einem Typliteral muss sich direkt auf eines eingebauten Symbols beziehen.

Antwort

2

Wenn Sie einen Typ deklarieren, die die gleiche Eigenschaft Namen als String Konstante hat Sie die folgende Syntax (Lookup-Typ Syntax)

const myProp = 'my prop'; 
type Foo = { 
    [P in typeof myProp]: string 
}; 
const test: Foo = { 
    [myProp]: myProp 
} 

Wenn Sie diese Tasten mehrere haben wollen verwenden könnte Sie können einen Union-Typ:

const myProp = 'my prop'; 
const otherProp = "otherProp" 
type Foo = { 
    [P in (typeof myProp | typeof otherProp)]: string 
}; 
const test: Foo = { 
    [myProp]: myProp, 
    [otherProp]: otherProp 
} 

die Typoskript Standardbibliotheken, eigentlich eine Art bereitstellt, die auf die obige Lookup-Typdeklaration entspricht, mit dem Namen Record. Mit diesem können Sie Ihren Typ schreiben als:

+0

Danke für die Answare bereitgestellt verwenden :) –

1

Sie können dies einmal nächste Version von Typescript veröffentlicht.

Diese feature ist bereits in typescript @ next verfügbar. Wenn Sie möchten, können Sie es mit installieren:
npm install [email protected] --save-dev

der Zwischenzeit können Sie das Verfahren durch @Titian Cernicova-Dragomir

+1

Vielen Dank für Ihre Answare. Vielleicht wird das in der nächsten Zeit meine Lösung sein, aber momentan rettete die Antwort von @Titan meinen Tag –

Verwandte Themen