declaration merging
- это продвинутая фича для продвинутых юзеров. В обычном случае ты не должен расширять библиотечные типы. Ты должен создавать свои.{
foo: 'string'
}
{
foo: string
bar: string
}
но можешь типу {
foo: string
bar?: string
}
bar
.MySuperMutableRefObject
у которого есть prev
ты присваиваешь обычный MutableRefObject
(полученный из useRef
) у которого нет prev
.interface MySuperMutableRefObject<T> extends MutableRefObject<T> {
prev: null | HTMLParagraphElement;
}
function useMySuperRef<T>(value?: T): MySuperMutableRefObject<T> {
const ref = useRef(value) as MySuperMutableRefObject<T>;
ref.prev ??= null;
return ref;
}
Тип'MutableRefObject<null>'
не имеет ничего общего с'MutableRefObject<HTMLParagraphElement | null>'
useRef
без указания типа, и передаёшь ему null
, ts и выводит тип MutableRefObject<null>
, откуда ему знать что ты туда ещё и HTMLParagraphElement класть хочешь?const ref: MutableRefObject<null | HTMLParagraphElement> = useRef<null | HTMLParagraphElement>(null);
const ref = useRef<HTMLParagraphElement>(); // нафига те null если undefined тоже неплох:)
interface MySuperMutableRefObject<T> extends MutableRefObject<T> {
prev?: null | HTMLParagraphElement;
}
el-option
тоже в подкомпонент можно. Каждую el-table-column
- в свой компонент. И т.д.el-select
сам по себе жирный. Можно во-первых задать ему фиксированную высоту, во-вторых задать фиксированную высоту строкам таблицы. el-select
и el-table
на предмет оптимизаций: зачастую жирные компоненты имеют специальные пропсы, которые отключают анимации, оптимизирую отрисовку и всё такое прочее.el-select
и дебажим... key?: string
то же самое что key: string | undefined
. *<template #default="scope">
<v-select-column :selected="selected_table_items_set.has(scope.row.id)" :name="scope.row.name" :key="scope.row.id"/>
</template>
<template>
<span v-if="!selected">
{{ name.join(', ') }}
</span>
<el-select
v-else
v-model="name"
multiple
collapse-tags
:max-collapse-tags="4"
:multiple-limit="50"
style="width: 100%"
>
<el-option
v-for="item in name_options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</template>
violation_type
отсутствует в act
, то можно условие написать так: {act.violation_type?.violation_description ? (
. doctype
.
Единственный практический кейс я описал собственно в ответе, а вся остальная бесполезная тонна говна в саге просто мазохизма ради. Можешь почитать документацию если хочется боли.:)