phép nói rằng tôi có một lớp cơ sở với một số dataItems tài sản đó là hàng loạt các DataItem:Nhận kiểu của một biến và tạo thể hiện mới của loại hình này
export class BaseClass{
dataItems:DataItems[];
}
Sau đó, tôi có một vài lớp mà mở rộng BaseClass và dataItems của họ thuộc tính là một mảng của một số lớp mở rộng DataItems:
export class BetterClass extends BaseClass{
dataItems:BetterDataItems[];
}
export class BestClass extends BaseClass{
dataItems:BestDataItems[];
}
Bây giờ tôi muốn thêm một phương thức trong BaseClass để tạo dataItems và thêm chúng vào mảng. Nó sẽ có thể làm tất cả điều này trong BaseClass? Tôi cần tạo ra thể hiện của BetterDataItems hoặc BestDataItems, tùy thuộc vào lớp được sử dụng.
Tại thời điểm này tôi chỉ đơn giản là thêm vào:
dataItemType: typeof DataItem;
tài sản để BaseClass và trong mỗi lớp kéo dài BaseClass tôi ghi đè biến này với đúng loại mục dữ liệu:
trong BetterClass:
dataItemType: typeof BetterDataItem = BetterDataItem;
trong BestClass:
dataItemType: typeof BestDataItem = BestDataItem;
.210
Và sau đó, trong BaseClass Tôi làm điều này:
var dataItem = new this.dataItemType();
này hoạt động tốt nhưng câu hỏi của tôi là - nó sẽ có thể để tránh việc dataItemType
tài sản ở tất cả? Tôi có thể tìm thấy loại mảng dataItems
và tạo một phiên bản mới không?
Cảm ơn!
+1; Vì lợi ích của sự hoàn chỉnh, tôi nghĩ bạn có thể sử dụng toán tử 'instanceof' trong' BaseClass' nhưng nó thực sự là một anti-pattern trong trường hợp này. (http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf 4.13 Loại xác nhận) –
Cảm ơn. Vì vậy, tôi giả định rằng không thể đơn giản nhận được một loại của một lớp từ một biến và sau đó tạo ra một lớp học?instanceof sẽ yêu cầu kiểm tra từng loại, vì vậy nó thực sự không phải là một giải pháp tốt. – zeroin