Mor*_*gig 9 javascript oop class typescript angular
我有一些用于 CRUD API 服务类的类,我想扩展它,但为了考试而放弃了一些属性,这是我的类
class Parent {
public propertyToKeep: any;
public propertyToDelete: any;
constructor() { }
}
Run Code Online (Sandbox Code Playgroud)
这是儿童班
class Child extends Parent {
constructor() {
super();
}
}
Run Code Online (Sandbox Code Playgroud)
我不想查看和访问的另一个文件
export class comeComponent {
constructor(private child: Child) {
this.child.propertyToKeep // work
this.child.propertyToDelete // error and I can't even see it
}
}
Run Code Online (Sandbox Code Playgroud)
vic*_*707 26
我刚刚遇到了与您相同的用例,这就是我的做法:
const Omit = <T, K extends keyof T>(Class: new () => T, keys: K[]): new () => Omit<T, typeof keys[number]> => Class;
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样使用它:
class Child extends Omit(Parent, ['propertyToDelete']) {}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,child 现在只有一个属性(它也适用于方法)。
如果您正在处理 NestJS API,@nestjs/swagger中的包有一些很好的帮助器。他们的实现更加复杂,所以我猜他们保留了其他东西,比如他们自己的属性装饰器(我对 Typescript 很陌生,所以也许我错过了他们所做的一切的重点)。
PS:法国小伙第一次尝试用不完美的英语回答所以请友善^^
小智 8
这是一种方法:
class Parent {
propertyToKeep = 'hi';
propertyToDelete = 'bye';
constructor() {}
}
class Child extends Parent {
constructor() {
super();
delete this.propertyToDelete;
}
}
const myObject = new Child();
console.log(myObject);
/* OUTPUT:
{
"propertyToKeep": "hi"
}
*/Run Code Online (Sandbox Code Playgroud)