4
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?

お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

【TypeScript】実はクロージャ外で型ガードしてもクロージャ内部では型判定の結果が無効化されていた

Posted at

問題!!

以下コードを実行すると何が出るでしょうか!?

function getUrls(url: string | URL, names: string[]) {
    if (typeof url === "string") {
        url = new URL(url);
    }

    return names.map(name => {
        url.searchParams.set("name", name)
        return url.toString();
    });
}

console.log(getUrls("http://localhost:8080", ["test"]))

答え!!

クロージャ内で引数urlの型が分からないのにURL型のメソッドを使おうとしてエラーになります。

つまり型判定の結果が無効化されちゃっています…..

image.png

でもバージョン5.4から!!!

バージョン5.4からクロージャ内部に対して型判定の結果が有効化されるようになりました。

ちゃんと正常に表示されます!!

["http://localhost:8080/?name=test"]

TypeScript Playgroundからもエラーが表示されていません!!

image.png

参考文献

4
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
4
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?