interface CreatureBase {
type: string;
subtype: string;
params: unknown;
}
interface PeopleBase extends CreatureBase {
type: 'People';
}
interface PeopleChild extends PeopleBase {
subtype: 'child';
params: {
age: number;
school: string;
}
}
interface PeopleAdult extends PeopleBase {
subtype: 'adult';
params: {
height: number,
weight: number,
age: number
}
}
type Creature = PeopleChild | PeopleAdult; //...
const arr: Creature[] = [
{
type: 'People',
subtype: 'adult',
params: {
height: 1,
weight: 2,
age: 3
}
},
{
type: 'People',
subtype: 'child',
params: {
school: 'foo',
age: 3
}
},
{
type: 'People',
subtype: 'adult',
params: {
school: 'foo', // err
age: 3
}
}
]
as any
, или дважды кастанув в новый тип var as unknown as type
. Но не нужно.) "plugin:@typescript-eslint/recommended"
, то не нужен, он просто там уже прописан.recommended
и ты можешь его выкинуть, набросав свой по вкусу. И тогда всё сломается. Потому лучше указывать парсер сразу явно. params
, кроме специального исключения для *
.slug
вам не очень нужен, то можно сделать так:{
path: '/product/*',
name: 'Product',
params: true,
component: () => import(/* webpackChunkName: "Category" */ '../views/ProductCard')
},
<router-link :to="{name:'Product', params: {pathMatch: item.url}}</router-link>
v-bind:
это то же самое что :
. А key
должен стоять на каждом итерируемом элементе. Уникальный для каждого элемента. Это очевидно, если понимать нахрена он вообще нужен(для обновления только тех кусков, что действительно обновились и сохранения тех, что не изменились).key
тебе нужен ещё и на label
.