const dataLocal = JSON.parse(localStorage.getItem('data') || '[]');
const value = localStorage.getItem('data');
if (value) {
const dataLocal = JSON.parse(value);
}
const value = localStorage.getItem('data');
if (!value) {
return;
}
const dataLocal = JSON.parse(value);
const updateSearch: ChangeEventHandler<HTMLInputElement> = (event) => {};
или
const updateSearch = (event: ChangeEvent<HTMLInputElement>) => {};
onChange?: ChangeEventHandler<T> | undefined;
interface INavDataBase {
name: string;
link: string;
}
interface INavDataChilds {
name: string;
children: INavDataBase[];
}
type TNavData = INavDataBase | INavDataChilds;
export const navData: TNavData[] = [
{
name: "Название меню 1",
link: "path_to_page",
},
{
name: "Название меню 2",
children: [
{
name: "Название меню 1",
link: "path_to_page",
},
{
name: "Название меню 2",
link: "path_to_page",
},
],
},
];
// Здесь можно по разному проверять и hasOwnProperty или "link" in navData
export const isNavDataBase = (navData: TNavData): navData is INavDataBase =>
navData.hasOwnProperty("link");
export const isNavDataChilds = (navData: TNavData): navData is INavDataChilds =>
navData.hasOwnProperty("children");
navData.forEach((data) => {
if (isNavDataBase(data)) {
// Здесь будет автокомплит при обращении - data.link
} else {
// И здесь, хотя второго защитника мы не использовали - data.children
}
});
type THash = {
id: number;
hash: string;
};
type TChannel = {
channelid: number;
childrenHash: THash[];
};
type TData = TChannel[];
type THashAcc = Record<THash["hash"], THash["id"][]>;
export const comparsion = (data: TData) =>
data.map((n) => {
const ids = Object.values(
n.childrenHash.reduce<THashAcc>((acc, m) => ((acc[m.hash] ??= []).push(m.id), acc), {})
).filter((m) => m.length > 1);
return {
...n,
childrenHash: ids.length ? ids : null,
};
});
handleChangeInfoMain: (value: string) => void