2017-11-07 5 views
1

Ich versuche, einen Konstruktorparameter beim Erstellen einer Instanz einer Klasse zu überprüfen.Validieren von Konstruktorparameter und Flusenfehler

Der Parameter sollte ein Objekt sein, das genau alle Eigenschaften (von angemessenem Typ) wie in der Klasse definiert enthält.

Wenn dies nicht der Fall ist, möchte ich, dass TypeScript die fehlende Übereinstimmung lint.

class User { 
    username: string; 
    // more properties 

    constructor(data:object) { 
     // Check if data Obejct exactly all the class properties and they are of the right type; 
     // Set instance properties 
    } 
}; 

// Desired Output 
new User(); // "data parameter missing"; 
new User(45); // "data parameter is not of type object"; 
new User(); // "username Poperty missing!"; 
new User({username:"Michael"}); // Valid; 
new User({username:43}); // "username is not of type string"; 
new User({username:"Michael", favoriteFood: "Pizza"}); // "favoriteFood is not a valid property"; 

tsconfig.json

{ 
    "compilerOptions": { 
    "target": "es2016", 
    "module": "es2015", 
    "lib": [ 
     "es2016.array.include" 
    ], 
    "downlevelIteration": true, 
    "strict": true 
    } 
} 

Antwort

2

Die Lösung wird erklärt, eine Schnittstelle:

interface UserProps { 
    username: string; 
} 

class User implements UserProps { 
    username: string; 
    // more properties 

    constructor (data: UserProps) { 
    // Check if data Obejct exactly all the class properties and they are of the right type; 
    // Set instance properties 
    } 
} 
+0

so tat, aber meine IDE (IntelliJ IDEA) Fussel immer noch nicht eine Diskrepanz. Die Verwendung einer Schnittstelle ist sinnvoll (vor allem im Konstruktor deklarieren), aber ich muss immer noch die Eigenschaften in der Schnittstelle und der Klasse definieren, gibt es keine sauberere Möglichkeit, dies zu erreichen? –

+0

Ich nehme an, Sie haben für Ihr Projekt Typoskript Syntax Checker konfiguriert? –

+0

Ich bin mir nicht sicher, ich habe meine 'tsconfiig, json' Datei zur Frage hinzugefügt –

Verwandte Themen