可索引的部分

时间:2019-07-08 16:45:12

标签: typescript typescript2.0

如何使Partial<T>可索引?

let entity: Partial<T> = {};
entity[id] = 444;

这是打字稿错误:

  

在类型Partial<T>上找不到带有'string'类型参数的索引签名。

1 个答案:

答案 0 :(得分:1)

我认为将id声明为keyof T会更好。在可能的情况下,添加索引签名实际上会关闭变量的类型检查

declare let id: string;
let entity: Partial<T> = {};
entity[id as keyof T] = 444;

这里的假设是id是一个字符串,代表您正在索引的类型的键。您可能应该事先检查id确实是有效密钥。

type T = {
    id: number,
    no: number
}

let id: keyof T = Math.random() > 0.5 ? "id" : "no";
let entity: Partial<T> = {};
entity[id] = 444;

如果id始终是常量,则最好将id声明为keyof T

为完整起见,添加索引签名可以使用交集:

let entity: Partial<T> & Record<string, T[keyof T]> = {};
entity[id] = 444;