繁体   English   中英

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

[英]Typescript type inference on dynamically accessed object properties

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;

dataWrong获取错误

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

在上面这样的情况下,如何获取dataWrong在打字稿中推断出正确的类型? 类型断言(更好的类型守卫)是唯一的方法吗?

如果使用as const断言(这将使编译器保持RESPONSE_PROPS.DATA的字符串文字类型为"data" ),则RESPONSE_PROPS.DATA将键入为string它按预期工作:

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;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM