169 похожих чатов

Хочу типизировать семейство объектов с общим типом поля id для

всех, остальные поля для каждого объекта свои. При этом нужно создать независимый тип, в котором так же есть обязательное поле id, а остальные не интересны вообще.

export type ConcreteObject = {id: number, someField: string};
export type IdRequiredObject = {id: number, [key: string]: any};

Попробовал написать как в листинге выше. В том месте, где IdRequiredObject возвращается в результате, а результат принимается в ConcreteObject, ts говорит, что де нет поля someField в твоем IdRequiredObject.


Можно это как-то разрулить?

9 ответов

11 просмотров

Ээ, export interface WithID = { id: number } и принимать на вход его? Конкретные типы образовать по типу export type Something = WithID & { ... }.

Wanna_Phonila- Автор вопроса

да, так можно. Но по смыслу эти типы не связаны между собой и связывать их таким образом, мне кажется странным.

type Id<T extends {}> = T & { id: number } type Book = Id<{ title: string }> type Kek = { uuid: string } type KekWithId = Id<Kek>

Wanna_Phonila- Автор вопроса

Тут такое дело, что мне надо, чтобы Id предполагал наличие любого поля со строковым ключом и любым типом в значении

Id делает из любого твоего типа такой же тип, только с id: number

Wanna_Phonila- Автор вопроса

Ситуация примерно такая type IdRequiredType = { id: number } const commonCreator = (props) => { const genericData: IdRequiredType = getDataDueVar(props.var); return props.children(genericData) } // ################################### type Data = { id: number, content: string } const component = (data: Data) => { return ... } const container = () => { const someVar = ...; return commonCreator({var: someVar, children: component}) } И просто наследовать конкретный тип от базового с ID не подходит, потому что component ожидает не базовый тип, а конкретный. Тут по идее нужен апкаст, но я не очень понимаю, как его сделать. Собственно component не имеет никакого понятия о том, кто его вызывает (и не должен иметь), а в commonCreator может быть отправлен любой компонент с соответсвующим интерфейсом. И, наверно, я мог бы как-то использовать такое interface ICommonCreator { <T>(): T } но, не смотря на пример выше, я пишу на React, там jsx в вызове компонентов. А я не очень понимаю как передать тип внутри jsx(может никак).

как-то непонятно( собери в песочнице пример рабочий, если не лень

Wanna_Phonila- Автор вопроса

ну, немного лениво. Я пока оставил там any везде, чтобы работало =)

https://t.me/ts_cool/146024

Похожие вопросы

Обсуждают сегодня

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
Вопрос. Теоретический. Есть список команд. Команды отправляю в обработку некой функции, по очереди. Разные команды могут давать разные результаты после обработки. В зависимос...
Serjone
7
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
10
Всем вечера. Подскажите как лучше сделать. делаю на Д10 Например будет база данных на SQLite. в ней будет много таблиц. более 50шт Типа справочник. Содержать ID Name Id p...
Андрей Т 🐎
10
это группа токсиков или тех кто помогает?
Ибрагим
9
Я короче решил скомпилировать Nim в js, я думал он сработает как обычный транслятор. По итогу он мне создал файл с расширением js, и туда поместил кучу кода Вопрос, что это з...
𝕾𝖍𝖆𝖉𝖊 <suspense>
8
мы пытаемся подменить функцию, которая имеет меньше инструкций относительно функции, которой подменяем. https://www.reddit.com/r/jailbreakdevelopers/comments/w06ujy/mshookfun...
Óðinn
6
подскажите пожалуйста, как мне освободить результат записанный в переменную result? в чем проблема подскажите если МОЖЕТЕ?
Михаил Helper
28
Добрый день! Хочу спросить совета. Хочется в скрипт добавить некую конструкцию, что скрипт создал файл, который нужно потом скопировать в определенное место. Нашел такой сп...
Mikhail
4
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Карта сайта