JavaScriptをTypeScriptに移行する際に迷ったこと

この記事は約4分で読めます。
スポンサーリンク

やりたいこと

題名の通り。

備忘録です。

随時更新

スポンサーリンク

関数の返り値を関数の引数に渡す際にエラー

変数の型が複数ある場合に返り値を引数が固定されている関数に渡す際にエラー

具体例

        let json = localStorage.getItem(name);
        JSON.parse(json);

localStorage.getItem()の返り値はstring|nullなのに対してJSON.parse()の引数はstringのためエラーになる。

修正

        let json : string  = localStorage.getItem(name) as string;
        return JSON.parse(json);

ここでは上記のようにnullでもstring に変換してます。

        let json: string = localStorage.getItem(name) ?? "";
        return JSON.parse(json);

もしくは上記のように返り値がnullの場合は空文字列にするようにしてます。(こっちのほうがよさそう)

スポンサーリンク

存在するかわからないObjectのプロパティにアクセスする

特別な方を指定していないobjectのプロパティにアクセスしようとしてエラー

具体例

        let obj :object = GetObject(); // get object type is not defined
        if (!obj)return;
        if (obj.a) //error

Typeが未定義なobjのaにアクセスしようとしてエラー

修正

        let obj :object = LocalStorageManager.LoadObjSetting("GAME_SET");
        if (!obj)return;
        if ("a" in obj)

objの中にプロパティaがあることを確認するようにします。

スポンサーリンク

document.getElementById()の使用

document.getElementById()の返り値にアクセスしようとしたときに以下のエラーがでる。

Object is possibly ‘null’

具体例

document.getElementById("id").style.display = "none"

document.getElementById(“id”)がnullを返す可能性があるためエラー。

修正

エラーチェックすればいいのですがちょっとめんどくさい。

以下のようにdocument.getElementById(“id”)の後ろに!をつけることでエラーを回避できます。

document.getElementById("id")!.style.display = "none"
スポンサーリンク

parseIntのエラー

parseIntに引数をnumberを渡すと以下のエラーがでます。

(少数を整数にするのに使ってました。)

Argument of type 'number' is not assignable to parameter of type 'string'.

具体例

1.5がstringでなくてnumberなのでエラーです。(parseIntの引数はstringのみ)

parseInt(1.5);

修正

代わりに Math.roundを使います。(もしくはMath.floor,Math.ceil)

Math.round(1.5)
スポンサーリンク

関数の引数のWarning

関数を定義時に使用していない引数があるとWarning(エラーではないの動きはしますが気持ち悪いのでできるだけ直す方向で)

'p' is declared but its value is never read.

具体例

(x: number, y: number)  =>{return y + 1}

xを使用してないのでWarningになります。

決まった形のコールバックを宣言するときとか、関数を継承するときとかによく出ます。

修正

使用していない引数の先頭にに‗をつけるとWarningがなくなります。

(_x: number, y: number)  =>{return y + 1}

ちなみに_xは関数内で使用することも可能です。(可読性を考えてやめた方がいいですが)

コメント

タイトルとURLをコピーしました