构造函数中的Typescript部分参数和扩展类中的访问
我怎样才能做到这一点:构造函数中的Typescript部分参数和扩展类中的访问,typescript,Typescript,我怎样才能做到这一点: export class Base { constructor(public defaultValues: Partial<Base>) { if (defaultValues) for (const [key, value] of Object.entries(defaultValues)) this[key] = value; } } export class
export class Base
{
constructor(public defaultValues: Partial<Base>)
{
if (defaultValues)
for (const [key, value] of Object.entries(defaultValues))
this[key] = value;
}
}
export class Extended extends Base
{
public prop1: boolean;
public method1()
{
//prop1 does not exists, because defaultValues are Base not Extended
this.defaultValues.prop1; //!!!! ERROR Property 'prop1' does not exists on type 'Partial<Base>'.
}
}
导出类基
{
构造函数(公共默认值:部分)
{
如果(默认值)
for(对象项的常量[键,值](默认值))
此[键]=值;
}
}
导出类扩展扩展基
{
公共属性1:布尔值;
公共方法1()
{
//prop1不存在,因为DefaultValue是未扩展的基值
this.defaultValues.prop1;//!!类型“Partial”上不存在错误属性“prop1”。
}
}
我需要为类本身设置一些默认值,并将其存储在变量中,以便以后可以访问DefaultValue
编辑:我还尝试:
class Base<T extends Base = any> {
constructor(public defaultValues: Partial<T>) {
}
}
class Extended extends Base<Extended> {
public prop1: boolean;
public method1() {
this.defaultValues.prop1;
}
}
类基{
构造函数(公共默认值:部分){
}
}
类扩展扩展基{
公共属性1:布尔值;
公共方法1(){
此为.defaultValues.prop1;
}
}
但有一个错误:
这个,但现在我得到了一个错误
此[keyof T]无法访问T[keyof T]
:
导出类基
{
构造函数(公共默认值:T)
{
如果(默认值)
for(对象项的常量[键,值](默认值))
此[键]=值;//!!!!!错误
}
}
导出类扩展扩展基
{
公共属性1:布尔值;
公共方法1()
{
此为.defaultValues.prop1;
}
}
默认参数错误:
编辑3:在安装并安装了Typescript SDK 2.3之后,以及在针对VS 2017的Intellisense中选择了Typescript 2.3之后,我取得了一些进展。
有一个小问题:
Base
没有名为prop1
的成员,Extended
有。您可以将
Base
设置为通用:
class Base<T extends Base = any> {
constructor(public defaultValues: Partial<T>) {
...
}
}
class Extended extends Base<Extended> {
public prop1: boolean;
public method1() {
this.defaultValues.prop1;
}
}
差异为
this[key as keyof this]=值代码>它不工作。我得到了一个错误,你可以在我编辑的帖子中检查它。是typescript 2.3中的一项新功能检查我的修订答案我已升级到2.3.4。我有点搞砸了,因为全局打字脚本太旧了。但它不起作用!查看我的最新图片。感谢您的尝试。请检查您是否正在使用tsc的本地版本并且该版本已更新。您是否正在使用--noImplicitAny
标志?
class Base<T extends Base = any> {
constructor(public defaultValues: Partial<T>) {
...
}
}
class Extended extends Base<Extended> {
public prop1: boolean;
public method1() {
this.defaultValues.prop1;
}
}
class Base<T extends Base<any>> {
constructor(public defaultValues: Partial<T>) {
}
}
class Base<T extends Base<any>> {
constructor(public defaultValues: T) {
if (defaultValues) {
for (const [key, value] of Object.entries(defaultValues)) {
this[key as keyof this] = value;
}
}
}
}