TypeScript undefinedとnullを各プロパティから削除したい場合
// この型を
type User = {
id: string
value: string | undefined
code: number | null | undefined
}
// このようにしたい
/*
{
id: string;
value: string;
code: number;
}
*/
// これを使う
type NoUndefinedField<T> = { [P in keyof T]: NonNullable<T[P]> }
// 期待した型になる
type NoUndefinedUser = NoUndefinedField<User>
memo
value だけ undefined と null を除去したい。
type User = {
id: string
value: string | undefined
code: number | null | undefined
}
// わかりづらい。。
type NoUndefinedField<T extends {value: any}> = { [P in keyof Pick<T, 'value'>]: NonNullable<Pick<T, 'value'>[P]> } & Omit<T, 'value'>
type NoUndefinedUser = NoUndefinedField<User>
// これはOK
const a: NoUndefinedUser = {
id: 'AAA',
value: 'BBB',
code: undefined
}
// これはNG
const b: NoUndefinedUser = {
id: 'AAA',
value: undefined,
code: undefined
}
最近のコメント