#typescript
Вопрос:
Я хочу построить тип {name:string,value:string}
из другого типа Todo
.
Ниже код выдает ошибку: Свойство » 0 «не существует для типа» Выбрать<Задание, «элементы»>».
type Todo = {
title: string;
items:Array<{name:string,value:string}>;
description: string;
completed: boolean;
}
type TodoItems = Pick<Todo, "items">[0]; //ERROR: Property '0' does not exist on type 'Pick<Todo, "items">'.
const todo: TodoItems = {
name: "Clean room",
value: "yes",
};
Примечание:
Todo
поставляется изts
модуля, поэтому его нельзя редактировать.
Какому подходу я мог бы следовать, чтобы извлечь {name:string,value:string}
из Todo
этого ?
Ответ №1:
Я думаю, что вам нужно разделить пункт Todo на отдельный тип, как сказал Дмитрий Золотухин, это будет самый правильный способ. НО если вы не можете этого сделать, вы можете создать этот тип
type TodoItems = Todo["items"][number]
// ...or
type TodoItems = Pick<Todo, "items">["items"][number]
Ответ №2:
Ты был почти прав, попробуй type TodoItems = Todo["items"][0];
type Todo = {
title: string;
items:Array<{name:string,value:string}>;
description: string;
completed: boolean;
}
type TodoItems = Todo["items"][0];
//...
Ответ №3:
Я бы сделал это по — другому:
interface TodoItem {
name: string
value: string
}
interface Todo {
title: string
items: TodoItem[]
description: string
completed: boolean
}
const todo: TodoItem = {
name: "Clean room",
value: "yes",
}
Комментарии:
1. спасибо за альтернативное решение, но из-за некоторых ограничений я хочу извлечь тип массива из существующего типа.