类方法无法识别

时间:2018-01-06 21:56:44

标签: javascript angular typescript

我试图在我的类上添加一个方法,但它被识别为属性而不是方法?

shape.ts

export class Shape {
   color: string;
   size: string;

   constructor() {
     this.color = 'Green';
   }

   getColor() {
     return this.color;
   }
}

模拟data.ts

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}'.

3 个答案:

答案 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'}
];

demo

答案 1 :(得分:2)

正如@ tony19所说的那样,getColor不是可选的 - 它是Shape上的一个属性,当编译器在Shape[]中转换每个对象时,编译器会期望这个属性到Shape。使用Partial<T>的替代方法可能是在实例化color实例时设置shape类的ShapeShape成员:

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(),但您并不需要它,因为您可以直接访问对象值。

通常我们使用静态方法来解析或调整对象到您的类