問題!!
以下コードを実行すると何が出るでしょうか!?
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型のメソッドを使おうとしてエラーになります。
つまり型判定の結果が無効化されちゃっています…..
でもバージョン5.4から!!!
バージョン5.4からクロージャ内部に対して型判定の結果が有効化されるようになりました。
ちゃんと正常に表示されます!!
["http://localhost:8080/?name=test"]
TypeScript Playgroundからもエラーが表示されていません!!
参考文献