みかづきブログ・カスタム

基本的にはちょちょいのほいです。

TypeScriptでthisの型を指定する 👨‍🏫

f:id:kimizuka:20210911202448p:plain

functionで宣言した関数の中でthisを使うと、

'this' implicitly has type 'any' because it does not have a type annotation.

とエラーが出ます。

アローファンクションと近い、functionによる関数宣言は実行方法によってthisが変化するからです。

TypeScriptのドキュメント をみてみると、

Unfortunately, the type of this.suits[pickedSuit] is still any. That’s because this comes from the function expression inside the object literal. To fix this, you can provide an explicit this parameter. this parameters are fake parameters that come first in the parameter list of a function:

function f(this: void) {
  // make sure `this` is unusable in this standalone function
}

https://www.typescriptlang.org/docs/handbook/functions.html#this-parameters より引用

www.typescriptlang.org


と書いてあるので、パラメーターの第一引数でthisを指定するのがセオリーのようです。

class Klass {
  constructor() {
    func.call(this);

    function func(this: Klass) { // パラメータでthisの型を指定
      console.log(this);
    }
  }
}

こんな感じで指定するとエラーが消えます。