此计算属性result = result.Concat(new[] { new V_Student_Attendace_DayWise()});
曾经对我有用:
lastSeenString
但现在export class User {
public lastSeen?: Date;
private _lastSeenString?:string = "";
get lastSeenString():string {
return Time.timeSince(this.lastSeen);
}
}
会返回lastSeenString
。永远不会调用getter中的""
语句。怎么会? return
已填充。
客户端:
lastSeen
我的打字稿编译为it('Displays the user\'s "last seen"', () => {
component.user.lastSeen = new Date();
fixture.detectChanges();
expect(component.user.lastSeenString).toBe("less than a minute ago");
expect(page.lastSeen.innerText).toBe("last seen less than a minute ago");
});
。为什么getter中的代码没有执行?
应该执行但不执行的时间类:
es5
User类的实际实现:
export class Time {
public static timeSince(date: Date) {
let start = +new Date();
let elapsed = +new Date() - start;
var seconds = Math.floor((elapsed) / 1000);
// var seconds = Math.floor((new Date() - +date) / 1000);
//var seconds = Math.floor(((new Date().getTime()/1000) - +date))
var interval = Math.floor(seconds / 31536000);
if (interval > 1) {
return interval + " years";
}
interval = Math.floor(seconds / 2592000);
if (interval > 1) {
return interval + " months";
}
interval = Math.floor(seconds / 86400);
if (interval > 1) {
return interval + " days";
}
interval = Math.floor(seconds / 3600);
if (interval > 1) {
return interval + " hours";
}
interval = Math.floor(seconds / 60);
if (interval > 1) {
return interval + " minutes";
}
return "less than a minute ago";
}
}
我看到实现有export var SERENA: User = {
id: 1,
lastSeenString: "",
lastSeen: new Date("October 13, 2016 11:13:00"),
badges: ["active User", "helper"],
memberSince: new Date("October 13, 2014")
}
,但我认为这会触发getter,而不仅仅是返回lastSeenString = ""
。
更新:我非常确定只需导出该JSON对象并将其称为""
即可。我想我必须重新开始。
答案 0 :(得分:11)
getter是在User
的原型上定义的 - 即作为类本身的一部分。您需要使用该类(例如使用new User()
)构建实例,以使getter正常工作。
目前,您只需构建一个vanilla JavaScript对象,然后告诉TypeScript它与真实User对象的形状相同。这传递了类型检查,因为它是相同的形状 - 读取它上面的任何字段将返回与真正的User对象相同类型的值 - 但这并不能告诉你关于这些领域的潜在行为的任何事情。
答案 1 :(得分:3)
就我而言,我从网络获取对象数据为JSON。然后分配如下数据:
let newUser = Object.assign(new User(), data)
我可以访问所有公共数据和函数,但无法访问此对象内对象的函数,getter和setter。所以我无法访问私人数据,即使我可以打印出来。
class User {
name: string
state: UserState
}
class UserState {
private _stateInfo: string
getter()......
}
所以我可以访问名称,并可以打印出state
的数据。但无法访问state
内的函数。
解决此问题的方法是在传递UserState
对象的数据时初始化新的User
对象。