Không, hệ thống kiểu nguyên cảo là không đủ biểu cảm cho điều đó - xem các cuộc thảo luận trong https://github.com/Microsoft/TypeScript/issues/7225 và https://github.com/Microsoft/TypeScript/issues/4890.
Các thành ngữ 'loại của các tầng lớp trong nguyên cảo được viết như
interface Constructor<T> {
new (...args): T;
}
Vì vậy, một cách để viết lời tuyên bố cho Soạn là
export declare class Simple {}
export declare class Super extends Simple {
static Compose<T>(Base?: Constructor<T>): Constructor<T & {/*mixed-in declarations*/}>
}
Đó là, Soạn kiểu trả về được tuyên bố là một constructor cho kiểu giao nhau - một kiểu phải có tất cả các thuộc tính của tham số (Base) cùng với tất cả các thuộc tính của mixin.
Bạn có thể sử dụng khai đó (giả định đó là trong file library.d.ts) như
import {Super} from './library'
let MyComposed = Super.Compose(Super)
let myInstance = new MyComposed
Sự bất tiện nhỏ này là bạn luôn luôn phải cung cấp luận cứ cho Super.Compose() vì suy luận kiểu không hoạt động mà không biết giá trị cho tham số mặc định và bạn không thể cung cấp giá trị cho tham số mặc định trong tệp khai báo.
Nhưng vấn đề lớn là bạn có thể không thực sự sử dụng kết quả của Soạn như là một lớp:
class MyClass extends Super.Compose(Super) {}
không biên dịch do các vấn đề nêu trên:
error TS2509: Base constructor return type 'Super & {}' is not a class or interface type.
lớn giải thích, cảm ơn. Theo dõi https://github.com/Microsoft/TypeScript/issues/4890 ngay bây giờ. – trefeater
Trong https://github.com/therror/therror, điều này đạt được bằng cách xuất các hình dạng cho các lớp mixin trả về và nhà phát triển phải xác định hình dạng mới trong mã https://github.com/therror/therror # typescript-limits – trefeater