我是打字稿的新手。
我有两个Student类对象。可能是AStudent和BStudent 现在我想要一个方法,它返回一个组合数组,包含它们是否为空
如果两者都不为null,则数组将为[AStudent,BStudent];如果AStudent不为空且BStudent为null,则数组将为[AStudent]
如何在打字稿中实现这一目标?
由于
答案 0 :(得分:1)
combineTwoObject(obj1 = null, obj2 = null) {
let objArray = [];
if(obj1 != null)
objArray.push(obj1);
if(obj2 != null)
objArray.push(obj2);
return objArray;
}
答案 1 :(得分:1)
您可以将所有内容添加到数组中,然后使用Array.filter
let arr = [AStudent, BStudent].filter(s => !!s);
答案 2 :(得分:1)
您可以使用非常抽象的方法来实现这一点,这适合您从两个学生开始的情况,但也允许您将该功能与其他类型和其他大小的集合一起使用。我也冒昧地处理null
和undefined
。
function definedObjects<T>(...obj: T[]): T[]{
return obj.filter(s => !!s);
}
interface Student {
name: string;
}
var studentA: Student = { name: 'Steve' };
var studentB: Student = { name: 'Jocket' };
var studentC: Student; // undefined
var studentD: Student = null;
const result = definedObjects(studentA, studentB, studentC, studentD);
答案 3 :(得分:0)
您失去了一些灵活性,但另一种方法是使用不接受undefined
的方法扩展Array类。像这样:
export class NoUndefinedArray<T> extends Array<T> {
constructor() {
super();
}
push(item: T) {
if (item !== undefined) {
super(push);
}
}
concat(item: T | T[]) {
const arr = [].concat(item).filter(i => i !== undefined);
return super(arr);
}
}