TypeScript - 对象初始值设定项中的 Get 属性问题

Posted

技术标签:

【中文标题】TypeScript - 对象初始值设定项中的 Get 属性问题【英文标题】:TypeScript - Issue with Get property in object initializer 【发布时间】:2016-12-27 13:50:47 【问题描述】:

我正在使用带有 Angular2 的 TypeScript,以下是我的类声明 -

export /**
 * Stress
 */
class Student 
    FirstName: string;
    LastName: string;

    constructor() 
    

    get FullName() : string 
        return this.FirstName + this.LastName;
    

当我尝试使用以下代码初始化上述类时 -

var stud1: Student =  FirstName:"John", LastName:"Troy" 

我收到以下错误 -

Type ' FirstName: string; LastName: string; ' is not assignable to type 'Student'.
Property 'FullName' is missing in type ' FirstName: string; LastName: string; '.

任何帮助请我在这里做错了什么,或者 TypeScript 还不支持它?

【问题讨论】:

当我尝试初始化上面的类时我猜你的意思是“实例化”。 【参考方案1】:

要从 Student 类构造对象,您需要使用类的构造函数。

var stud1 = new Student();
stud1.FirstName = "John";
stud1.LastName = "Troy";

console.log(stud1.FullName);

或者更好的是,让构造函数初始化对象的字段:

class Student 
    FirstName: string; //this is public, unless you specify private
    LastName: string;

    constructor(firstName: string, lastName: string)
        this.FirstName = firstName;
        this.LastName = lastName;
    

    //your FullName getter comes here


var stud1 = new Student("John", "Troy");
console.log(stud1.FullName);

【讨论】:

我可以这样做只是因为我发现对象初始化器更方便。更何况当我不想将每个“set”属性都放在构造函数中时,在这种情况下我必须这样做。感谢您的回复。 要使用对象初始化器,Student 需要是接口,但是Student 将不能包含包括getter 在内的方法。他们讨论了一些选项here。 谢谢格兰加,这有帮助。

以上是关于TypeScript - 对象初始值设定项中的 Get 属性问题的主要内容,如果未能解决你的问题,请参考以下文章

不能在属性初始值设定项中使用实例成员 '';属性初始化程序在 'self' 可用之前运行

您只能在 C# 中的固定语句初始值设定项错误中获取未固定表达式的地址

MKCoordinateSpan中的错误,表示在自我可用之前运行

为啥 C# 3.0 对象初始值设定项构造函数括号是可选的?

对象初始值设定和集合初始值设定

使用传播算子深度合并对象