python - 如何在 Typescript 中模仿 Python 中的 kwargs
问题描述
所以我正在用打字稿建立一个小型图书馆。有一个基类可以继承多个类。该类base
有许多属性可以作为参数在构造函数中传递,可以有默认值。问题是,是否必须base
在每个子类的构造函数中提供这些类属性?
例子:
class BaseClass {
constructor(a: number, b: number, c: number, d: number) {
this.a = a;
this.b = b;
this.c = c;
this.d = d;
}
private a: number;
private b: number;
private c: number;
private d: number;
}
class SubClass extends BaseClass {
constructor(a: number, b: number, c: number, d: number, e: number, f: number) {
super(a, b, c, d);
this.e = e;
this.f = f;
}
private e: number;
private f: number;
}
是否有任何方法可以减少冗长,例如 pythonkwargs
在调用 super in 时可以使用__init__
?
解决方案
是的,您可以将工作方式类似的对象传递给 kwargs。我在 aws CDK 中看到了类似的编码风格,现代 ecmascript 标准(以及连续的打字稿)似乎与这种方法很好地配合,因为对象解构现在是一等公民。例如:
interface BaseClassKwargs{
a: number;
b: number;
c: number;
d: number;
}
interface SubClassKwargs extends BaseClassKwargs{
e: number;
f: number;
}
class BaseClass {
constructor(kwargs:BaseClassKwargs) {
this.a = kwargs['a'];
this.b = kwargs['b'];
this.c = kwargs['c'];
this.d = kwargs['d'];
}
private a: number;
private b: number;
private c: number;
private d: number;
}
class SubClass extends BaseClass {
constructor(kwargs:SubClassKwargs) {
super(kwargs);
this.e = kwargs['e'];
this.f = kwargs['f'];
}
private e: number;
private f: number;
}
并且利用重组甚至可以写成:
class BaseClass {
constructor({a, b, c, d}:BaseClassKwargs) {
this.a = a;
this.b = b;
this.c = c;
this.d = d;
}
private a: number;
private b: number;
private c: number;
private d: number;
}
class SubClass extends BaseClass {
constructor({e,f, ...kwargs}:SubClassKwargs) {
super(kwargs);
this.e = e;
this.f = f;
}
private e: number;
private f: number;
}
在 aws cdk 中,它们不被称为 kwargs,它们被称为道具,但无论名称如何,心态都是相似的。
请注意,对于具有默认值,甚至可以涵盖将完整对象及其属性都具有默认值的极端情况:
constructor({ a = 1, b = 0, c = -1, d = -2 } = {}): void {
// ...
}
推荐阅读
- html - Wordpress:如何更改站点标题旁边的站点徽标?
- c# - C# ExcelDataReader 错误 - XLSB 格式的“文件签名无效”
- java - 什么是应用程序的顶部栏以及如何更改其颜色?
- sql-server - 没有现有数据库的 SQL 数据库项目
- pandas - 如何在熊猫中输出“名称”值?
- elasticsearch - 如何通过 PySpark 将带有结构列的数据框写入 Elasticsearch
- jquery - 嗨,当我从第 11 行循环遍历 Datatable 分页表时,我在 Jquery 中遇到问题,它没有循环
- java - 如果我直接添加答案,为什么我的列表功能在这个问题中不起作用,但如果我创建列表的副本则起作用
- node.js - 如何在 mongodb 中获取图形的条件平均数据?
- reactjs - React 创建一个水平分隔线,中间有文本