Chức năng tùy chọn TypeScript trong Giao diện


98

Có thể tạo Giao diện trong TypeScript với chức năng tùy chọn không?

interface IElement {
  name: string;
  options: any;
  type: string;
  value?: string;
  validation(any): boolean; // --> should be optional.

}

2
Tôi đã tìm thấy câu trả lời, tôi nghĩ có thể triển khai chức năng tùy chọn như thế này: validation ?: (any) => boolean;
Anton Selin

Câu trả lời:


193

Hiện tại có ba cú pháp mà TypeScript cho phép khai báo hàm trong giao diện:

Sử dụng ví dụ của bạn về một validationhàm nhận 1 tham số ( anykiểu) và một booleangiá trị trả về:

validation: {(flag: any): boolean};

hoặc theo cú pháp mới hơn:

validation(flag: any) : boolean;

hoặc một giải pháp thay thế là:

validation: (flag: any) => boolean;

Giải pháp:

vì vậy, để làm cho nó trở thành tùy chọn với cú pháp cũ rất dễ dàng:

validation?: {(flag: any): boolean};

với cú pháp thứ hai (bổ sung gần đây - cảm ơn @toothbrush)

validation?(flag: any) : boolean;

hoặc trong cú pháp thứ ba (như bạn đã tìm thấy):

validation?: (flag: any) => boolean;

3
Cách bạn đã viết nó, anykhông phải là một kiểu, mà là tên của một tham số ngầm hiểu về kiểu any. Các tham số phải được đặt tên, ngay cả trên các giao diện. Mã này sẽ không biên dịch được nếu --noImplicitAny được bật. Nó phải là một cái gì đó như thế này: validation?:(whatever:any) => boolean;đâu whateverlà tên tham số hợp lý.
NYCdotNet

@NYCdotNet: Đúng, tôi không nên đọc bản gốc . Đã sửa :)
Gone Coding

@ go-coding Chào bạn! Làm cách nào để biết chức năng đã được xác định hay chưa?
Ilan Olkies

1
@IlanOlkies: Giống như cách bạn kiểm tra bất kỳ thứ gì trong JavaScript if (object.validation):) Nó cần phải dựa vào ngữ cảnh đối tượng, vì vậy if (this.validation)cũng có thể phù hợp tùy thuộc vào hoàn cảnh của bạn.
Gone Coding
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.