我不知道someObj
将是什么结构。
那么 TypeScript 并不能真正帮你解决这个问题。TypeScript 的类型检查在compile-time完成。如果 的结构someObj
仅在运行时已知,TypeScript 就无法对该结构进行类型安全的访问。您需要在编译时知道这些属性的属性键和可能值是什么。
例如:在您的示例中,属性名称是字符串,属性值是字符串或数字(但不是布尔值或对象等)。您可以声明由字符串索引的类型(因为所有属性名称最终都是字符串或符号,在本例中为字符串),其中属性值是数字或字符串:
declare type SomeObjType = {
[key: string]: number | string
};
然后getProperty
是:
function getProperty<T extends SomeObjType>(obj: T, key: string): number | string {
return obj[key];
}
你可以像这样使用它(在这种情况下,我JSON.parse
用来模拟从程序范围之外接收这些数据):
const someObj: SomeObjType = JSON.parse(`{
"myValue": 123,
"otherProperty": "321"
}`);
console.log(getProperty(someObj, 'myValue'));
console.log(getProperty(someObj, 'otherProperty'));
在操场上
但这并没有给您带来太多收益,并且消除了属性值不是数字或字符串的可能性。
您可能只需要使用object
:
function getProperty(obj: object, key: string) {
return obj[key];
}
const someObj = JSON.parse(`{
"myValue": 123,
"otherProperty": "321"
}`);
console.log(getProperty(someObj, 'myValue'));
console.log(getProperty(someObj, 'otherProperty'));
在操场上