Javascript 动态访问对象属性的Typescript类型推断

Javascript 动态访问对象属性的Typescript类型推断,javascript,typescript,types,Javascript,Typescript,Types,dataError获取错误 interface CustomResponse { data: string; status: number; [key: string]: string | number; } const RESPONSE_PROPS = { DATA: "data", STATUS: "status", }; const response: CustomResponse = { data: "test", status: 20

dataError
获取错误

interface CustomResponse {
    data: string;
    status: number;
    [key: string]: string | number;
}

const RESPONSE_PROPS = {
  DATA: "data",
  STATUS: "status",
};

const response: CustomResponse = {
    data: "test",
    status: 200,
};

let dataWrong: string = response[RESPONSE_PROPS.DATA];
let dataRight: string = response.data;

在上述情况下,如何在typescript中获得
数据错误
推断正确的类型?类型断言(更好的类型保护)是唯一的方法吗

RESPONSE\u PROPS.DATA
类型为
string
,如果您使用
as const
断言(这将使编译器保持
RESPONSE\u PROPS.DATA
的字符串文本类型
),它将按预期工作:

Type 'string | number' is not assignable to type 'string'. Type 'number' is not assignable to type 'string'

注意:如果字符串文字类型用于索引,则实际上不需要索引签名。

哇,这很有效。。我可以得到一些关于这个
const
类型推断的文档参考/文章吗?@Tamil另一个
interface CustomResponse {
    data: string;
    status: number;
    // [key: string]: string | number; not necessary for the code to work
}

const RESPONSE_PROPS = {
    DATA: "data",
    STATUS: "status",
} as const;

const response: CustomResponse = {
    data: "test",
    status: 200,
};

let dataWrong: string = response[RESPONSE_PROPS.DATA];
let dataRight: string = response.data;