Javascript 如何将字符串转换为字符串属性

Javascript 如何将字符串转换为字符串属性,javascript,typescript,Javascript,Typescript,我正在尝试使用Typescript编写一个函数,该函数包含两个参数,其中第二个参数的类型始终为string。函数应将第二个参数作为其属性应用于第一个参数 例如: let x = measure('Hello', 'length'); // should return 'Hello'.length // => x = 5 如何将字符串“length”转换为“Hello”的属性以返回“Hello”。length?如果我理解您的意思: function measure(obj: any, pr

我正在尝试使用Typescript编写一个函数,该函数包含两个参数,其中第二个参数的类型始终为string。函数应将第二个参数作为其属性应用于第一个参数

例如:

let x = measure('Hello', 'length'); // should return 'Hello'.length
// => x = 5
如何将字符串“length”转换为“Hello”的属性以返回“Hello”。length?

如果我理解您的意思:

function measure(obj: any, property: string): any {
    return obj[property];
}

let x = measure('Hello', 'length');
console.log(x); // 5
()


编辑 或者更好:

function measure<T, K extends keyof T>(obj: T, property: K): T[K] {
    return obj[property];
}
如果我理解你:

function measure(obj: any, property: string): any {
    return obj[property];
}

let x = measure('Hello', 'length');
console.log(x); // 5
()


编辑 或者更好:

function measure<T, K extends keyof T>(obj: T, property: K): T[K] {
    return obj[property];
}

很好,但是如果属性名作为变量传递,第二个就不起作用了。@johnyhk Right,除非您将变量定义为
keyof string
(或强制转换为它)。是的,强制转换的大小写会变傻,因为返回类型是所有属性类型的并集。:)有趣的案例。非常感谢各位,第一个解决方案对我的代码的其余部分更方便,因为第二个参数作为变量传递,而第一个参数并不总是字符串。很好,但是如果属性名作为变量传递,第二个将不起作用。@johnyhk Right,除非将变量定义为类型
keyof string
(或强制转换为该类型)。是的,并且强制转换的大小写变得愚蠢,因为返回类型是所有属性类型的并集。:)有趣的例子。非常感谢各位,第一个解决方案对我的代码的其余部分更方便,因为第二个参数作为变量传递,而第一个参数并不总是字符串。