У меня есть файл для синтаксического анализа, и я хотел бы определить тип для его заголовка и привести начало данных к этому типу для упрощения использования в коде вместо использования индексов. Упрощенный пример будет примерно таким:
type T = {
id: string,
value: number
}
let data = ['demoID', 123, ...];
let id = ((data as any) as T).id;
// error occurs as .id is not 0th index
Как я могу реализовать свою идею в Typescript?
@SLaks, можешь подробнее рассказать? Мой опыт TS довольно новый
Опечатка в последней строке кода - редактировать нельзя (слишком коротко), но скобка отсутствует
@SLaks Зачем использовать класс только для хранения данных? В JavaScript уже есть простые объекты
вы пытаетесь перейти от позиционной к ассоциативной / именованной структуре. Почему бы не добавить конструктор или фабричную функцию к типу T, который выглядит так:
constructor(id, value, ...rest){
this.id = id;
this.value = value;
// etc
}
кстати, «общий» здесь не совсем правильный термин. "смешанный" более уместен
Что вы пытаетесь сделать:
'id' must have the type of T.id
что имеет смысл (устно). Однако в TypeScript это не так. тип T.id - это string
, поэтому вам следует сделать
let id = data[0] as string;
Это позволит вам написать в коде что-то вроде этого:
let t: T = {
id: id, // no need to cast :)
value: 10
}
Использование индекса - это именно то, от чего я пытаюсь избавиться. Я хотел бы просто «привести» данные к типу и использовать имя свойства вместо индекса :)
TypeScript не может изменить поведение во время выполнения; он не может превратить
.id
в[0]
. Вместо этого разберите массив в класс.