2017-03-03 6 views
8

Czy można ograniczyć param, aby nie akceptować ciągów, tablic itp.?Typ ogranicznika maszynopisu bez właściwości akceptowania ciągów lub tablic

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

function baz(param: foo) { 
} 

baz("hello"); 
+1

Dlaczego cię to obchodzi? Jeśli pasuje do twojego interfejsu, dlaczego zastanawiasz się, czy to ciąg znaków czy obiekt? –

+2

Mieliśmy błąd, w którym przechodziliśmy przez właściwość obiektu zamiast obiektu, a maszynopis został skompilowany poprawnie. – user3233089

+0

To jest ważny problem. –

Odpowiedz

5

można zrobić coś takiego zrobić baz przyjąć przynajmniej obiektu:

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 tutaj jest Intersection Type.

+0

Czy to nie jest oszukiwanie? Wymuszasz, że parametr musi być obiektem. –

+1

@MuratK .: Czy tego nie chce OP? Ale skłaniałbym się ku temu, aby nie robić tego typu, po prostu 'function baz (param: foo & object)' –

+1

Warto zauważyć, że typ 'object' jest bardzo nowy, będziesz potrzebował TypeScript 2.2, aby go użyć. –

Powiązane problemy