Javascript 具有getter和setter的对象上的类型脚本转换问题
我对以下代码有问题。我认为这是一个铸造问题,但我不知道如何解决它Javascript 具有getter和setter的对象上的类型脚本转换问题,javascript,typescript,casting,Javascript,Typescript,Casting,我对以下代码有问题。我认为这是一个铸造问题,但我不知道如何解决它 interface Code { code: string; expiration: number; } interface IActivationCode { [userId: string]: Code; } const activationCode: IActivationCode = { set userId(id: string) { this[id] = { code: Math.
interface Code {
code: string;
expiration: number;
}
interface IActivationCode {
[userId: string]: Code;
}
const activationCode: IActivationCode = {
set userId(id: string) {
this[id] = {
code: Math.random()
.toString(36)
.substring(7),
expiration: new Date().setMinutes(new Date().getMinutes() + 30)
};
},
get userId() {
return this.id;
}
};
您可以在此处复制代码以查看问题。
更改用户ID的类型将从代码中删除错误,但我仍然不清楚您试图实现的目标。TypesCrpt Playerd链接实际上不起作用。无论如何,错误在于您试图将字符串转换为键入“Code”。当您返回一个
字符串(setter接受一个字符串)时,rinterface将userId
的返回类型显式定义为code
。id
和this[id]
。在您的示例中,this.id
将始终未定义,因为它未在setter中分配。但是,如果您尝试分配它,它将抛出一个错误,因为您无法分配类型为code
type的对象属性
我将得到如下结果:{myId:{code:'vwurul',expiration:1551775465464}
我想根据用户id生成一个随机字符串,它是激活密钥和该密钥的过期日期
interface Code {
code: string;
expiration: number;
}
interface IActivationCode {
[userId: string]: Code;
}
const activationCode: IActivationCode = {
set userId(id: Code) {
id = {
code: Math.random()
.toString(36)
.substring(7),
expiration: new Date().setMinutes(new Date().getMinutes() + 30)
};
},
get userId() {
return this.id;
}
};