#typescript #typescript-generics
#typescript #typescript-дженерики
Вопрос:
у меня есть общий интерфейс, подобный этому
type myType =
{
value1:string;
value2:string;
}
и класс
class array<myType> extends Array<myType>
{
let a:myType;
a.value1 ==> error.
}
проблема в том, что внутри класса тип MyType неправильно читается, поскольку это другое дело, как я могу это решить?
Комментарии:
1. В чем ошибка?
2. когда я печатаю
a.value1
, автозаполнение не работает и говорит, что этого свойства нет, в то время как, если я объявляю ту же переменную вне класса, она работает.3. Вам необходимо инициализировать свойство.
Ответ №1:
Чтобы элементы этого массива MyType
считались равными , объявите класс с уникальным именем, которое расширяется Array<MyType>
. На отдельные элементы массива можно ссылаться с помощью this[index]
.
Вот пример (и ссылка на игровую площадку):
type MyType = {
value1: string;
value2: string;
};
class MyTypeArray extends Array<MyType> {
getCombinedValues(index: number) {
// type of elementAtIndex is inferred as MyType
const elementAtIndex = this[index];
return `${elementAtIndex.value1} ${elementAtIndex.value2}`
}
}
const myTypeArray = new MyTypeArray({ value1: 'Hello', value2: 'world' });
// Prints 'Hello world'
console.log(myTypeArray.getCombinedValues(0));