Hayır, typescript tipi sistemini oluşturmak istiyorum bunun için yeterince anlamlı değildir - https://github.com/Microsoft/TypeScript/issues/7225 ve https://github.com/Microsoft/TypeScript/issues/4890 tartışmaya bakınız.
daktilo deyimsel 'sınıfların tipi' oluştur'da için deklarasyon yazmak için
interface Constructor<T> {
new (...args): T;
}
Yani bir yolu olarak yazılır dönüş tipi bir olduğu açıklanarak oluturunuz olan
export declare class Simple {}
export declare class Super extends Simple {
static Compose<T>(Base?: Constructor<T>): Constructor<T & {/*mixed-in declarations*/}>
}
olduğunu kesişim türü için kurucu - karışımın tüm özellikleriyle birlikte parametrenin (Taban) tüm özelliklerine sahip olması gereken bir tür. O beyanı kullanabilirsiniz
bu
import {Super} from './library'
let MyComposed = Super.Compose(Super)
let myInstance = new MyComposed
küçük rahatsızlık gibi (o library.d.ts dosyasında olduğu varsayımıyla) her zaman Super.Compose() tür kesmesi nedeniyle için argüman sağlamak zorunda olmasıdır varsayılan parametrenin değerini bilmeden çalışmaz ve bildirim dosyasında varsayılan parametre için değer sağlayamazsınız. ,
error TS2509: Base constructor return type 'Super & {}' is not a class or interface type.
Büyük açıklama: nedeniyle yukarıda belirtilen hususlara
derlemek değildir:
Ama büyük sorun gerçekten bir sınıf olarak Compose sonucunu kullanamaz olmasıdır Teşekkürler. Https://github.com/Microsoft/TypeScript/issues/4890 adresini şimdi takip edin. – trefeater
https://github.com/therror/therror adresinde, bu, döndürülen sınıfların mixine ilişkin şekillerin dışa aktarılmasıyla elde edilir ve geliştiricinin yeni şekli https://github.com/therror/therror kodunda tanımlaması gerekir. # typescript-sınırlamalar – trefeater