尝试使用方括号表示法访问对象属性时出现Typescript错误TS1003

时间:2019-09-17 11:54:52

标签: typescript

在TypeScript中使用括号表示法引用对象属性的正确方法是什么?

在常规JavaScript中,我可以这样做:

returnValue(object, key) {
  return object[key];
}

如果我调用returnValue({someKey: 1}, "someKey"),该函数将返回1

当我尝试在TypeScript中执行此操作时,会收到:

TS1003: Identifier expected. Name expected.

执行此操作的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

您可以考虑使用keyof

interface YourObj {
    someKey: string;
    someOtherKey: number;
}
function returnValue(obj: YourObj, key: keyof YourObj) {
    return obj[key];
}

console.log("Object value = " + returnValue({someKey: "someValue", someOtherKey: 1}, "someKey"))

如果您在非returnValue以外的任何地方调用YourObj并且在YourObj中没有出现的任何键,则会给您带来编译错误

答案 1 :(得分:0)

Typescript是JavaScript的严格超集,因此JavaScript在Typescript中是合法的。

使用点符号或括号符号的JavaScript对象属性访问器在Typescript中均有效。运行下面的示例代码不会生成任何错误或警告。

要获得更多帮助,您需要提供一个minimal, reproducible example

请参见 TypeScript Playground Demo

function returnValue(obj: any, key: string) {
    return obj[key];
}

console.log("Object value = " + returnValue({someKey: 1}, "someKey"))

输出

Object value = 1