из массива объекты поля в котором имеют undefined, вот так работает
const data: Array<{ id: number, value?: string }> = []
const q = data.filter((v): v is { [P in keyof typeof v]-?: (typeof v)[P] } => !v.value)
а вот так нет
const data: Array<{ id: number, value?: string }> = []
const q = data.filter((v): v is Required<typeof v>=> !v.value)
хотя вроде одно и тоже
Playground
Не совсем одно и тоже. В первом случае из объекта удалится проперти, во втором - они из опциональных превращаются в нерациональные
А что значит - не работает? Алгоритм один и тот же, типизация только отличается. Оба варианта компилятся
да меня интересует именно типизация, к рантайму вопросов нет
у меня оба варианта компилятся const data: { id: number, value?: string }[] = []; const q = data.filter((v): v is { [P in keyof typeof v]-?: (typeof v)[P] } => !v.value); const data2: { id: number, value?: string }[] = [] const q2 = data2.filter((v): v is Required<typeof v>=> !v.value)
типы после фильтров разные
и?
вопрос почему, в первом варианте я делаю то-же самое что и Required и все ок, а когда я напрямую использую Required то он оставляет undefined
Обсуждают сегодня