我试图在我的类上添加一个方法,但它被识别为属性而不是方法?
export class Shape {
color: string;
size: string;
constructor() {
this.color = 'Green';
}
getColor() {
return this.color;
}
}
import { Shape } from './shape.ts';
export const shapeList: Shape[]= [
{color: 'Red', size: 'Large'},
{color: 'Orange', size: 'Medium'},
{color: 'White', size: 'Small'}
]
ERROR in src/app/mock-data.ts(5,14): error TS2322: Type '{ color: string, size: string}' is not assignable to type 'Shape[]'.
Type '{ color: string, size: string}' is not assignable to type 'Shape'.
Property 'getColor' is missing in type '{ color: string, size: string}'.
答案 0 :(得分:2)
getColor
不是可选的,因此在每个Shape
数组元素中都需要它。您可以使用Shape
声明一个partial T
(具有Partial<Shape>
可选属性的泛型类)的数组:
const shapeList: Partial<Shape>[]= [
{color: 'Red', size: 'Large'},
{color: 'Orange', size: 'Medium'},
{color: 'White', size: 'Small'}
];
答案 1 :(得分:2)
正如@ tony19所说的那样,getColor
不是可选的 - 它是Shape
上的一个属性,当编译器在Shape[]
中转换每个对象时,编译器会期望这个属性到Shape
。使用Partial<T>
的替代方法可能是在实例化color
实例时设置shape
类的Shape
和Shape
成员:
class Shape {
constructor(private color: string, private size: string) {
this.color = color;
this.size = size;
}
getColor() {
return this.color;
}
getSize() {
return this.size;
}
}
const shapeList: Shape[]= [
new Shape('Red', 'Large'),
new Shape('Orange', 'Medium'),
new Shape('White', 'Small'),
]
for (const shape of shapeList) {
console.log(shape);
}
答案 2 :(得分:-1)
使用静态getColor(),但您并不需要它,因为您可以直接访问对象值。
通常我们使用静态方法来解析或调整对象到您的类