Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 具有getter和setter的对象上的类型脚本转换问题_Javascript_Typescript_Casting - Fatal编程技术网

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;
  }
};