所以我知道TS中的可选参数,但是我不知道如何使通用类的可选内容像这样,这是我的代码
export class TableColumn<T, P? extends keyof T> {}
而且我什至不能让多个具有相同名称的班级这样做
export class TableColumn<T, P extends keyof T> {}
export class TableColumn<T, P extends keyof T, S extends keyof T> {}
有什么帮助吗?两种解决方案都可以帮助我,但我不知道为什么不起作用
更新资料
我正在这个图书馆工作
https://simplex24.de/smc-demo/direct-edit
它是角形材料表的通用表创建者,该库的问题在于,对于每一列,它仅获得模型的一个值
new TableColumn<TestData, 'id'>('My ID', 'id');
但我还需要更多,如果我不将其设为可选,则应将所有此类添加到
new TableColumn<TestData, 'aa','aa','aa'>('My aa', 'aa', 'aa', 'aa');
new TableColumn<TestData, 'bb', 'bb', 'bb'>('My bb', 'bb', 'bb', 'bb');
new TableColumn<TestData, 'cc', 'bb', 'aa'>('My cc', 'cc', 'bb', 'aa');
对于第一和第二列,请导入aa和bb,因为它不是可选的,我可以像这样简单地使其成为可选
new TableColumn<TestData, 'aa','aa','aa'>('My aa', 'aa',);
new TableColumn<TestData, 'bb','aa','aa'>('My bb', 'bb');
new TableColumn<TestData, 'cc', 'bb', 'aa'>('My cc', 'cc', 'bb', 'aa');
但正如U所见,我需要在类中将它们添加为通用类,因为我无法将其设为通用类
需要像这样
new TableColumn<TestData, 'aa'>('My aa', 'aa',);
new TableColumn<TestData, 'bb'>('My bb', 'bb');
new TableColumn<TestData, 'cc', 'bb', 'aa'>('My cc', 'cc', 'bb', 'aa');
您应该使用Never类型,这是U可以使用的方式
export class TableColumn<T,
P extends keyof T,
Z extends (keyof T | never) = never,
Y extends (keyof T | never) = never,
X extends (keyof T | never) = never,
W extends (keyof T | never) = never> {}
在构造函数中,很容易这样
constructor(public property: P,
public secondProperty?: Z, public thirdProperty?: Y,
public fourthProperty?: X, public fifthProperty?: W) {}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句