всех, остальные поля для каждого объекта свои. При этом нужно создать независимый тип, в котором так же есть обязательное поле id, а остальные не интересны вообще.
export type ConcreteObject = {id: number, someField: string};
export type IdRequiredObject = {id: number, [key: string]: any};
Попробовал написать как в листинге выше. В том месте, где IdRequiredObject возвращается в результате, а результат принимается в ConcreteObject, ts говорит, что де нет поля someField в твоем IdRequiredObject.
Можно это как-то разрулить?
Ээ, export interface WithID = { id: number } и принимать на вход его? Конкретные типы образовать по типу export type Something = WithID & { ... }.
да, так можно. Но по смыслу эти типы не связаны между собой и связывать их таким образом, мне кажется странным.
type Id<T extends {}> = T & { id: number } type Book = Id<{ title: string }> type Kek = { uuid: string } type KekWithId = Id<Kek>
Тут такое дело, что мне надо, чтобы Id предполагал наличие любого поля со строковым ключом и любым типом в значении
Id делает из любого твоего типа такой же тип, только с id: number
Ситуация примерно такая 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(может никак).
как-то непонятно( собери в песочнице пример рабочий, если не лень
ну, немного лениво. Я пока оставил там any везде, чтобы работало =)
https://t.me/ts_cool/146024
Обсуждают сегодня