构造函数中的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;
            }
        }
    }
}