И у каждого интерфейса есть свое значение на одно поле. Теперь как я могу проверить значение этого поле на допустимость ? например я хочу дать доступ только 3 из 12 интерфейса, не правильно я думаю 3 ифки делать
Опиши задачу по подробнее и покажи код пожалуйста
Думаю, по типам, проще всего со switch/case switch(type1.key) { case 'value1': case 'value2': case 'value3': return callRealFunc(type1); default: return; // Или throw }
а если их скажем 100 интерфейсов и я хочу 50 дать доступ
То, тогда это проблема структурного уровня, надо другое решение для этого придумывать
function isAllowed(type: Type1): type is Interface1 | Interface2 | Interface3 { return ['value1', 'value2', 'value3'].includes(type.key); }
Да, как я понял полюбому надо и значения и сами интерфейсы создавать допустимые
export function compareType<T extends { key: string }, N extends T["key"]>( object: T, types: readonly N[] ): object is T & { key: N } { return types.includes(object.key as N); } Вот это попробуй
export function isKeyInTypes<T extends { key: string }, N extends T["key"]>( object: T, allowedKeys: readonly N[] ): object is T & { key: N } { return allowedKeys.includes(object.key as N); }
Обсуждают сегодня