2017-01-26 8 views
5

FE、私はfooが言う、のデフォルト値(または初期値)を持っていることを宣言するにはどうすればよいTypeScript宣言ファイルのデフォルトのクラスプロパティ値を設定する方法は?

declare class Foo extends Bar { 
    foo: number 
} 

、私は

declare class Foo extends Bar { 
    foo: number = 60 
} 

を試みたが、私が手に60

を持っていますエラーのように

4  foo: number = 60 
        ~~ 

path/to/something.js/Foo.d.ts/(4,28): error TS1039: Initializers are not allowed in ambient contexts. 
+4

なぜ宣言されたクラスのデフォルト値を設定する必要がありますか? –

+0

良い点!私は、ランタイムコードはとにかくそれを行うと思います。 – trusktr

+0

ハハ、それは答えでなければなりません! – trusktr

答えて

3

プログラムは、相互に矛盾する2つのタスクを実行しようとします。

  1. それはクラスが存在するが、実際に他の場所で/それ以外に実装されている宣言にしようとします。
  2. を実装して、その実装をと定義します。

あなたは初期化子またはdeclare修飾子のいずれかを除去することによって、それに応じてプログラムを実行し、調整したい、これらのタスクのどれかを決定する必要があります。

-3

dを設定するにはコンストラクタが必要ですクラスプロパティに値を渡します。

これを試してみてください:

declare class Foo extends Bar { 
    foo: number; 
    constructor(){ 
    this.foo = 60; 
    } 
} 

UPDATE:私はあなたがキーワードDECLAREを使用している気づいたあなたのコードスニペットを詳しく見てとった後 は、そう、あなただけのクラス型を定義し、この1 実装は必要ありません。

UPDATE 2:クラスのコンストラクタは、このために必要ではない 、あなたは1の有無にかかわらず、あなたのプロパティを初期化することができます。

キーワードを削除すると、正常に動作するはずです。

class Foo extends Bar { 
     foo: number; 
     constructor(){ 
     this.foo = 60; 
     } 
    } 
+1

"デフォルト値をクラスプロパティに設定するには、コンストラクタが必要です。"それは完全に偽です –

+0

はい、実際には、このためのコンストラクタは必要ありません。私のクラス設計の選択です。私はこれを更新しています。なぜなら、人々は何も反応しないようにしたいからです。 –

+1

どうすれば反応することができますか?あなたは、間違った、無関係の主張をします。 –

9

クラス定義からdeclareを削除してみます。宣言を使用することによって、クラス型が定義されます。型は定義されているだけであり、実装を持つべきではありません。

class Foo extends Bar { 
    foo: number = 60 
} 
+1

@Downvoter、説明してください。 –

+1

私はdownvoterではないが、私はそれがあなたの前提のためだと思うだろう –

関連する問題