首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有私有属性的Typescript对象类型转换

具有私有属性的Typescript对象类型转换
EN

Stack Overflow用户
提问于 2017-11-28 03:49:33
回答 2查看 1.3K关注 0票数 0

我试图将一个对象强制转换为一个特定的类,但我收到错误消息:“ClassA类型中缺少_myPropertyPriv”

代码语言:javascript
复制
class ClassA{
    MyPropertyPub:number;
    private _myPropertyPriv
}
**later
var obj:ClassA = { MyPropertyPub:3 };

我不使用构造函数的原因是因为在真实的类中,我有他们的20个类似的属性,而我不想要一个有那么多属性的构造函数。

EN

回答 2

Stack Overflow用户

发布于 2017-11-28 04:21:42

typescript不允许这样做是有原因的:

代码语言:javascript
复制
class ClassA{
    MyPropertyPub:number;
    private _myPropertyPriv;
    public method() {

    }

}
var obj:ClassA = <any>{ MyPropertyPub:3 }; //works
obj.method();; // runtime error, obj is not actually of type ClassA

Typescript提供了Partial类型来定义包含原始类成员子集的类型:

代码语言:javascript
复制
var obj2:Partial<ClassA>= { MyPropertyPub:3 };

此外,使用Partial和Object.assign为类创建构造函数也很简单,而且非常有用:

代码语言:javascript
复制
class ClassA{
    MyPropertyPub:number;
    private _myPropertyPriv;

    constructor(cfg: Partial<ClassA>){
        Object.assign(this, cfg);
    }
    public method() {

    }
}

var obj3 = new ClassA({
    MyPropertyPub: 10
});
obj3.method();
票数 2
EN

Stack Overflow用户

发布于 2017-11-28 03:50:38

你的问题里没有选角的意思。您可以使用类型断言(通常称为强制转换)来执行此操作:

代码语言:javascript
复制
var obj:ClassA = { MyPropertyPub:3 } as ClassA; // OK
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47518728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档