如何解决在条件模型的类,接口,类型之间进行选择
我确实将Angular 8与TS 3.5一起使用。我从BE创建和接收对象,由于属性不存在,它经常给我输入错误。最好使用事先不知道的类型初始化对象?
想象(真的简化了):
export enum UnitTypeEnum {
COMMERCIAL = 'COMMERCIAL',RESIDENTIAL = 'RESIDENTIAL'
}
export class RentModel {
name: string;
price: number;
}
export class UnitModel extends RentModel {
type: UnitTypeEnum;
...
...
}
export class ResidentialModel extends UnitModel {
houseType: string;
}
export class CommercialModel extends UnitModel {
surface: number;
}
然后以一种形式:
const unitViewModel = new UnitModel();
if (this.selectedUnitType === UnitTypeEnum.RESIDENTIAL) {
(unitViewModel as ResidentialModel).houseType = this.unitForm.get('main.houseType').value;
}
我不预先知道unitViewModel是商用还是住宅的。 我应该为ResidentialModel或CommercialModel使用类,接口,类型吗? 避免出现许多“ XXXMODEL as XXXMODEL”的最佳方法是什么?
感谢您的帮助和建议。
解决方法
您可以尝试使用具有一种共同属性的界面,例如类型,然后可以为所有接口创建联合类型:
export enum UnitTypeEnum {
COMMERCIAL = 'COMMERCIAL',RESIDENTIAL = 'RESIDENTIAL'
}
interface RentModel {
type: UnitTypeEnum;
name: string;
price: number;
}
interface ResidentialModel extends RentModel {
houseType: string;
}
interface CommercialModel extends RentModel {
surface: number;
}
type UnitedType = ResidentialModel | CommercialModel;
let residential: UnitedType = {
type: UnitTypeEnum.RESIDENTIAL,name: 'Resodential',price: 100,houseType: 'house'
}
let commercial: UnitedType = {
type: UnitTypeEnum.COMMERCIAL,name: 'Commercial',surface: 200
}
if (residential.type === UnitTypeEnum.RESIDENTIAL) {
console.log(residential.houseType);
}
if (commercial.type === UnitTypeEnum.COMMERCIAL) {
console.log(commercial.surface);
}
代码:https://stackblitz.com/edit/typescript-2pxzbe?file=index.ts
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。