I have a type:
interface IThing {
foo?: number[]
bar?: number[]
baz?: number[]
}
I want to write a generic method to delete the values of any of the properties of type number[] that are empty arrays.
I have used this as my starting point:
type FilteredKeyOf<T, TK> = keyof Pick<T, { [K in keyof T]: T[K] extends TK ? K : never }[keyof T]>
function deleteIfEmpty(value: IThing, key: FilteredKeyOf<IThing, number[]>) {
const v = value[key]
if (v && v.length === 0) {
delete v[key];
}
}
If foo, bar and baz are not optional it behaves like I expect. How can I account for the optional values?