2016-04-11 25 views
0

Bize göre bir yapıcı işlevi oluşturan bir kütüphanemiz olduğunu söyleyelim. Bir Nesneyi ilk parametre olarak iletebilir ve bu özellikler yapıcı işlevine doğrudan eklenir. let bar = new Tiger('foo', 'bar') tür tanımı

  • kurucular Nitelikler Tiger.leg = 4
  • ikinci irade değiştirmek örneği oluşturmak

    1. : Şimdi 2 olasılık var

      let Tiger = can.Construct.extend({ 
          leg: 3 
      }); 
      

      : gibi

      bu örnek bakabilirsiniz atmak benim şimdiki tip definitios ile hata

      Property 'bacak' türü ConstructFactory değil çıkış

      benim şimdiki tip tanımı gibi görünüyor bunu

      :

      declare namespace can { 
      
          interface ConstructFactory { 
           new(...args: any[]): Construct; 
          } 
      
          class ConstructStatic { 
           static extend(staticProperties: Object): ConstructFactory; 
          } 
      
          class Construct extends ConstructStatic { 
           constructor(...args: any[]); 
          } 
      } 
      

      i yerine bir tür any dönerseniz ConstructFactoryTiger.leg hata atmayacak, ancak kurucu tanımı kaybolduğundan şimdi bir örnek oluşturamıyorum.

    cevap

    1

    Bunun aradığınız yapar düşünüyorum: Bu çubuğunda destek yazın vermek

    declare namespace can { 
    
        interface ConstructFactory { 
         new(...args: any[]): Construct; 
        } 
    
        class ConstructStatic { 
         static extend<T>(staticProperties: T): ConstructFactory & T; 
        } 
    
        class Construct extends ConstructStatic { 
         constructor(...args: any[]); 
        } 
    } 
    
    
    let Tiger = can.Construct.extend({ 
        leg: 3 
    }); 
    
    Tiger.leg = 4 
    
    let bar = new Tiger('foo', 'bar') 
    
    +0

    : 'arayüz ConstructFactory { yeni (... args: any []):Construct } ' –