2017-03-03 14 views
8

Có thể hạn chế param không chấp nhận chuỗi, mảng, v.v ... không?Loại hạn chế loại không có thuộc tính từ chấp nhận chuỗi hoặc mảng

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

function baz(param: foo) { 
} 

baz("hello"); 
+1

Tại sao bạn quan tâm? Nếu nó phù hợp với giao diện của bạn, tại sao bạn quan tâm cho dù đó là một chuỗi hoặc một đối tượng? –

+2

Chúng tôi đã có một lỗi mà chúng tôi đã vượt qua tài sản của đối tượng thay vì đối tượng, và biên soạn tốt đẹp. – user3233089

+0

Đó là một mối quan tâm hợp lệ. –

Trả lời

5

Bạn có thể làm một cái gì đó như thế này để làm baz chấp nhận ít nhất một đối tượng:

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 đây là một Intersection Type.

+0

Đó không phải là gian lận một chút? Bạn đang buộc rằng tham số phải là một đối tượng. –

+1

@MuratK .: Đó không phải là điều mà OP muốn? Nhưng tôi sẽ nghiêng về phía không làm cho nó thành một kiểu, chỉ cần 'hàm baz (param: foo & object)' –

+1

Đáng chú ý rằng kiểu 'object' là rất mới, bạn sẽ cần TypeScript 2.2 để sử dụng nó. –

Các vấn đề liên quan