2017-03-03 3 views
8

Ist es möglich, param einzuschränken, Zeichenfolgen, Arrays usw. nicht zu akzeptieren?Typescript restrictet type mit keine Eigenschaften akzeptieren Zeichenfolgen oder Arrays

interface foo { 
    a?: number; 
    b?: string; 
} 

function baz(param: foo) { 
} 

baz("hello"); 
+1

Warum kümmert es dich? Wenn es zu Ihrer Schnittstelle passt, warum beachten Sie, dass es sich um eine Zeichenfolge oder ein Objekt handelt? –

+2

Wir hatten einen Fehler, bei dem wir die Objekteigenschaft anstelle des Objekts übergeben und das Typoskript gut kompiliert haben. – user3233089

+0

Das ist eine berechtigte Sorge. –

Antwort

5

Sie können so etwas tun, um baz zumindest ein Objekt zu machen akzeptieren:

interface foo { 
    a?: number; 
    b?: string; 
} 

interface notAnArray { 
    forEach?: void 
} 

type fooType = foo & object & notAnArray; 

function baz(param: fooType) { 
} 

baz("hello"); // Throws error 
baz([]); // Throws error 

fooType hier ist ein Intersection Type.

+0

Ist das nicht ein bisschen betrügen? Sie erzwingen, dass der Parameter ein Objekt sein muss. –

+1

@MuratK .: Ist das nicht das, was das OP will? Aber ich würde mich darauf konzentrieren, es nicht zu einem Typ zu machen, nur 'function baz (param: foo & object)' –

+1

Bemerkenswert, dass der 'object' Typ sehr neu ist, du brauchst TypeScript 2.2 um es zu benutzen. –

Verwandte Themen