Я только начинаю с Typcript, и я не могу понять, возможно ли иметь свойство класса как объект, который будет содержать любое произвольное свойство в дополнение к свойствам, объявленным в классе. Например, я определил здесь name
как свойство Person
, а затем под properties
вы должны иметь возможность определять любые другие произвольные характеристики для человека, такие как их высота. Кажется, что назначение это идет нормально, но при попытке открыть его в строке 12 выдает ошибку, говоря:Объект с произвольными свойствами как свойство класса
Property 'height' does not exist on type 'Object'
достаточно Fair! Я знаю, что нет гарантии, что свойство с именем height
будет находиться под чем-то, что является просто объектом, но все равно должен быть способ сделать это.
Вот код:
class Person {
public name: string;
public properties: Object;
constructor(name: string, other: Object) {
this.name = name;
this.properties = other;
}
}
let props: Object = { height: 200 };
var nick = new Person("Bob", props);
console.log(nick.properties.height);
А вот альтернативный я попытался, который бросает точно такую же ошибку:
class Person {
public name: string;
public properties: Object;
constructor(name: string, other:{ height: number }) {
this.name = name;
this.properties = other;
}
}
var nick = new Person("Bob", { height: 200 });
console.log(nick.properties.height);
Другой вариант с интерфейсом я просто пытался , который все еще не работает.
interface PersonProperties {
height: number;
}
class Person {
public name: string;
public properties: Object;
constructor(name: string, other: PersonProperties) {
this.name = name;
this.properties = other;
}
getHeight(): number {
return this.properties.height;
}
}
var properties: PersonProperties = { height: 200 };
var nick = new Person("Bob", properties);
document.write(nick.getHeight().toString());
Вы может определять его как любой тип – Geeky