выберите тип массива в typescript

#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. спасибо за альтернативное решение, но из-за некоторых ограничений я хочу извлечь тип массива из существующего типа.