一些不同的对象作为接口中的类型 - Typescript

时间:2016-09-14 13:50:42

标签: typescript interface

我在typescript项目(Ionic 2)中有User接口,我希望他的一个变量有两个不同的选项作为类型。

我写的内容的例子:

export interface User {
    _id: string,
    usUnits: boolean,
    height?: UsHeightUnits | NotUsHeightUnits
};

interface UsHeightUnits {
    feets?: number,
    inches?: number
}

interface NotUsHeightUnits {
    centimeters?: number
}

这不会导致任何错误,错误会出现在另一个文件中:

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { User } from '../../interfaces/user/user';

@Component({
    templateUrl: 'build/pages/profile-edit/profile-edit.html',
})
export class ProfileEditPage {
    public user: User;

    constructor(private navCtrl: NavController) {
        // Here i have red error underline, under the "centimeters"
        this.user.height.centimeters = 4;
    }
}

错误是:[ts] Property 'centimeters' does not exist on type 'UsHeightUnits | NotUsHeightUnits'.

在使用|(或)的其他情况下,它工作正常,就像使用字符串而不是对象的情况一样:

export interface User {
    _id: string,
    gender: 'male' | 'female'
};

建议?

1 个答案:

答案 0 :(得分:1)

联合类型具有两种类型共有的所有属性。

为了更好地理解,请查看此处:https://www.typescriptlang.org/docs/handbook/advanced-types.html