0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

TypeScript 安心感向上のための対策メモ

Last updated at Posted at 2022-05-05

async内の型ガードがawait 後も維持される問題

問題: TypeScript側で絞り込んまれた結果が、await 後、維持されるべきでない場合も維持されてしまう。

例: ここでは console.log(moduleVar.foo.length) においてmoduleVar.fooが"bar" (string) だというTypeScript側の絞り込み結果が維持されてしまっていることから、コンパイルが通ってしまう。

module.ts
const moduleVar: {foo: string | undefined} = {
  foo: "bar",
};

async function main() {
  if (moduleVar.foo !== "bar") throw "";

  await otherProcess();

  console.log(moduleVar.foo.length);
}

async function otherProcess() {
  moduleVar.foo = undefined;
}

main();

※ 上例でいう moduleVar がクラスのインスタンスであっても同様

対策: 上例に即せば moduleVarfooの値をfunctionコールで取得するようにする

anyな値が非any型変数に代入できる問題

例: hoge の値はanyとして扱われる

const hoge = JSON.parse(`{aa:3}`);
const str: string = hoge;
console.log(str);

対策: anyな値が登場したら必ず絞り込むようにする

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?