やりたいこと
題名の通り。
備忘録です。
随時更新
関数の返り値を関数の引数に渡す際にエラー
変数の型が複数ある場合に返り値を引数が固定されている関数に渡す際にエラー
具体例
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) //errorTypeが未定義な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は関数内で使用することも可能です。(可読性を考えてやめた方がいいですが)
ユニオン型の関数の返り値の独自のプロパティにアクセス
ユニオン型の返り値をもつ関数(複数の型の中からどれかを返す関数)の関数の返り値の独自のプロパティにアクセスしようとするとエラー表示になります。(動きはするっぽい)
具体例
ClassA|ClassB|ClassCのユニオン型の返り値を持つ関数GetClassを使用します。
ここでClassAはプロパティXXを持ちClassB/ClassCはXXを持たないとします。
この場合以下のコードはエラーになります。(GetClassがXXを持たないClassB/ClassCを返す可能性があるため)
const returned_class = GetClass()
console.log(returned_class.XX) ////error修正
以下のようにinstanceof でどのクラスかを確認することでClassAのみがもつプロパティにアクセスできるようになります。
const returned_class = GetClass()
if (returned_class instanceof ClassA) {
console.log(returned_class.XX) //// no error
}

コメント