TypeScript delete演算子を使うときの注意点
TypeScript で delete 演算子を使用した場合、削除されたプロパティの型がundefinedと推論されるわけではなかったのでメモです。
例えば以下のようなケースです。
type Product = {
id: number
name: string
}
const deleteProductId1 = (product: {id?: number, name: string}) => {
delete product.id
}
const product1: Product = {
id: 12345,
name: 'system1'
}
deleteProductId1(product1)
product1.id // product1.id の型は number
deleteProductId1 関数内で delete 演算子を使って id を削除しています。
そのため、最後の行の product1.id は undefined になるかと思ったのですが、そうならないようです。
TypeScript が id を undefined であると推論させるのは、関数内で新しいオブジェクトを return するようにすることで達成できました。
type Product = {
id: number
name: string
}
const deleteProductId2 = (product: {id?: number, name: string}) => {
// id が undefined のオブジェクトを return してあげる
return {
...product,
id: undefined,
}
}
const product1: Product = {
id: 12345,
name: 'system1'
}
const deletedProduct= deleteProductId2(product1)
deletedProduct.id // deletedProduct.id の型は undefined
こちらで確認できます。
最近のコメント