2017-12-05 10 views
1
TSコンパイラは、このクラスのコンストラクタに参照しているので、私は、 return new this

typescriptですがインスタンス化することはできません無視抽象クラスエラー

abstract class MeteorCollection { 
    static $collection: Collection<any> 

    static findOne(selector: Selector = {}, options: FindOneOptions = {}) { 
     let item = this.$collection.findOne(selector, options) 
     return new this(item) 
    } 
} 

は、どのように私はそれがOKであることを知らせることができますラインでMeteorCollectionをインスタンス化することができないと文句を言い

ことMeteorCollection自体を拡張するのではなく、MeteorCollectionを拡張します。

+0

あなたがエラーと線の上コメント// @ TSを-ignoreは使用するか、この前の回答で使用されるアプローチを試みることができる-https://stackoverflow.com/questions/47423152/ignore-no-new -47425738#47425738 –

答えて

1

エラーを無視する必要はありません。サブクラスへの参照からメソッドを呼び出すつもりであると仮定して、this型アノテーションを使用してください。

abstract class MeteorCollection { 
    static $collection: Collection<any>; 

    static findOne<T extends MeteorCollection>(
    this: typeof MeteorCollection & (new (arg: any, ...args: any[]) => T), 
    selector: Selector = {}, 
    options: FindOneOptions = {} 
) { 
    const item = this.$collection.findOne(selector, options); 
    return new this(item); 
    } 
} 
+0

初期の問題を解決しましたが、新しい$(... args:any [])にプロパティ$ collectionが存在しないと文句を言います – Chris

+0

@Chris私は私の答えを編集しましたそれを修正して –

+1

ほぼそこに...今、それは新しいことのための0引数を期待していると言います – Chris

関連する問題