2017-05-24 5 views
4

Ich kenne Typ Union & Typ Schnittpunkt in Typ Skript, aber ich konnte keine Syntax oder Workaround zu Typausschluss zu finden. Gibt es eine Möglichkeit, das zu tun?Typoskript-Typ Ausschluss?

type ValidIndices = string^'_reservedProperty'; // All strings but '_reservedProperty' 
interface MyInterface { 
    [property: ValidIndices]: number; 
    _reservedProperty: any; 
} 
+0

Es gibt [Vorschlag] (https://github.com/Microsoft/TypeScript/issues/4183) für Subtraktionsarten –

Antwort

0

Wenn es eine begrenzte Anzahl von String-Werten ist, die zulässig sind, dann könnten Sie Zeichenfolgenliterale verwenden, um sie in dem

type ValidIndices = "a" | "b" | "c" ... 
Typ zu definieren

Aber ich glaube nicht, dass die Funktionalität, die Sie suchen, existiert jetzt als Teil einer Typdefinition.

Sie können dies natürlich durch Code in Ihrer Implementierung von MyInterface erreichen, um sicherzustellen, dass die ungültigen Werte nicht verwendet werden. Aber Sie können es nicht Teil der Typdefinition selbst machen (anders als String-Literale, die Sie wahrscheinlich nicht wollen).

0

Es ist keine vollständige Antwort. Aber wenn Sie Ausschluss für contsructor festlegen möchten params können Sie folgenden Code verwenden:

declare type Params<T, K extends keyof T = never, D extends keyof T = never> = (
    {[P in K]: T[P]} & 
    {[P in keyof T]?: T[P]} & 
    {[P in D]?: undefined } 
) 
... 
class Control{ 
    prop1: number 
    prop2: number 
    prop3: number 
    prop4: number 

    constructor(params: Params<Control, 'prop1' | 'prop2', 'prop4'>){ 
    Object.assign(this, params) 
... 

Und Sie erhalten:

params: { 
    prop1: number 
    prop2: number 
    prop3?: number 
    prop4?: undefined 
}