我在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'
};
建议?
答案 0 :(得分:1)
联合类型具有两种类型共有的所有属性。
为了更好地理解,请查看此处:https://www.typescriptlang.org/docs/handbook/advanced-types.html