yapıcı işlevini başvurulması

oy
14

Im bir değer olarak işlev geçirmek için türlü yapıcı bir başvuru nasıl alabilirim merak. Temelde, örneklerini bir genel tür kayıt örneğinin üyesi işlevini çağırarak oluşturulmasına izin verecek bir genel tür kayıt istiyorum.

Örneğin:

class GeometryTypeInfo
{        
    constructor (public typeId: number, public typeName: string, public fnCtor: (...args: any[]) => IGeometry) {
    }
    createInstance(...args: any[]) : IGeometry { return this.fnCtor(args); }
    }
}

Sonra:

class Point implements IGeometry {
    constructor(public x: number, public y: number) { }

    public static type_info = new GeometryTypeInfo(1, 'POINT', Point); // <- fails
    // also fails: 
    //    new GeometryTypeInfo(1, 'POINT', new Point);
    //    new GeometryTypeInfo(1, 'POINT', Point.prototype);
    //    new GeometryTypeInfo(1, 'POINT', Point.bind(this));
}

Herkes bir sınıflar yapıcı işlevine başvurmak mümkün olup olmadığını biliyor musunuz?

Oluştur 08/10/2012 saat 19:17
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
18

Bir yapıcı tipini tanımlamak için bir yapı imzasıyla birebir yapıcı türünü değişmezi veya bir nesne türü kullanabilirsiniz (bakınız genel olarak dil spec bölüm 3.5). senin örneğini kullanmak için, aşağıdaki çalışması gerekir:

interface IGeometry {
    x: number;
    y: number;
}

class GeometryTypeInfo
{        
    constructor (public typeId: number, public typeName: string, public fnCtor: new (...args: any[]) => IGeometry) {
    }
    createInstance(...args: any[]) : IGeometry { return new this.fnCtor(args); }
}

class Point implements IGeometry {
    constructor(public x: number, public y: number) { }

    public static type_info = new GeometryTypeInfo(1, 'POINT', Point);
}

GenometryTypeInfo en yapıcı parametre listesinde değişmez yapıcı türü ve CreateInstance uygulanmasında yeni çağrı dikkat edin.

Cevap 08/10/2012 saat 19:27
kaynak kullanıcı

oy
6

typeof YourClasssize yapıcı verir türü tip ek açıklamalarda kullanılabilir.

YourClassve this.constructorkendisini constructor olduğunu. Yani, bu kod derler:

class A {}

const B : typeof A = A;

this.constructor Bunu döküm bazı hile kullanmak gerekir, bu tür durumlarda, yani (komik) typescript tarafından yapıcı türü değeri olarak kabul edilmez hiçbir any

new (<any> this.constructor)()

Bu kadar.

Cevap 30/06/2016 saat 19:40
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more