2017-05-28 5 views
0

おそらく質問は既に頼まれていましたが、何も見つかりませんでした。そしてそれはとても素朴なようです。 TypeScriptはオブジェクトのリテラル表記に適していますが、内部でメソッドを定義すると、thisというコンテキストがその関数内で正しく処理されないため、thisany型を受け取っているようです。したがって、自動補完はありません。TypeScriptのオブジェクトリテラル表記内の関数。なぜ `this`コンテキストの型が` any`ですか?

var foo = { 
    log(str) { 
     console.log(str); 
    }, 
    print(str) { 
     this. /* No autocompletion */ 
    } 
};  
foo. /* Normal autocompletion */ 

Playground

当然のことながら、私はオートコンプリート機能が正しく方法、foo変数を消費したときにそれがないと同じように動作することを期待します。最初にクラスを宣言してオブジェクトをインスタンス化することはできますが、中間であるclassまたはinterfaceを宣言せずに動作しない理由は、この単純なケースでは定型文のようですか?機能上の公式TypeScript Documentationによると

答えて

1

は、[...]まだanyです。これは、thisがオブジェクトリテラルの中の関数式から来ているからです。

GitHubの上TypeScript Wikithisキーワードとそのコンテキストについての良い説明があります。

+0

本当にありがとうございます。実際には、このクラスを宣言したほうがいいですし、すべてが1か所にあります。さもなければ、私たちにはたくさんの繰り返しコード、インターフェース定義、宣言があります。だから、それは私のために、オブジェクトのリテラル表記はまったく使えないということです。 – tenbits

関連する問題