0

还在学习打字稿,我有这个对象

export class Marker {
    position: {
        lat: number,
        lng: number,
    };
    label: {
        color: string,
        text: string,
    };
    title: string;
    options: {
        animation: any,
    };
}

在我使用它的代码中,我这样做了,但是 marker.position 是未定义的

for (const ybEvent of this.Events) {
  const marker = new Marker();
  marker.title = ybEvent.name;
  marker.position.lat = ybEvent.latitude;
  marker.position.lng = ybEvent.longitude;
  marker.label.color = 'blue';
  marker.label.text = ybEvent.description;
  marker.options.animation = google.maps.Animation.BOUNCE;
  this.markers.push(marker);
}

在这个对象中初始化位置、标签和选项的最佳方法是什么?

4

1 回答 1

1

首先,我建议您在严格模式下使用 Typescript。

在严格模式下使用 typescript 时,如果类成员没有任何初始化,则会显示错误:

在此处输入图像描述

我还将定义每个对象的结构(也在对象内部)。

interface Position {
    lat: number,
    lng: number,
}

interface Label {
        color: string,
        text: string,
};
interface Options {
        animation: any,
}

如果您的 Marker 对象不需要任何内部逻辑,那么我还将它设置为接口:

interface Marker {
    position: Position;
    label: Label;
    title: string;
    options: Options;
}

你的初始化可能是这样的:

for (const ybEvent of this.Events) {
    const position: Position = {
        lat: ybEvent.latitude,
        lng: ybEvent.longitude,
    };

    const label: Label = {
        color: 'blue',
        text: ybEvent.description,
    }

    const options: Options = {
        animation: google.maps.Animation.BOUNCE
    }

    const marker: Marker = {
        position,
        label,
        options,
    }

    this.markers.push(marker);
}

或者没有中间对象:

for (const ybEvent of this.Events) {

    const marker: Marker = {
        position: {
            lat: ybEvent.latitude,
            lng: ybEvent.longitude,
        },
        label: {
            color: 'blue',
            text: ybEvent.description,
        },
        options: {
            animation: google.maps.Animation.BOUNCE
        }
    }

    this.markers.push(marker);
}

请记住,Typescript 的理念是确保type安全。如果您以这种方式初始化对象,myObject = {}则它没有任何类型信息。

于 2020-07-10T06:08:00.143 回答