Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 通过键访问时返回类型化对象属性_Typescript - Fatal编程技术网

Typescript 通过键访问时返回类型化对象属性

Typescript 通过键访问时返回类型化对象属性,typescript,Typescript,很难解释,下面是一个例子: interface O { n: number; s: string; } const f = (key: keyof O, o: O) => o[key]; const value = f('n', { n: 1, s: '' }); // value type is (string | number) 在这种情况下,我希望value类型为number,因为键n指向number属性您可以通过使用f函数的通用语法来实现这一点。对于一个匿名函数,您可以

很难解释,下面是一个例子:

interface O {
  n: number;
  s: string;
}
const f = (key: keyof O, o: O) => o[key];

const value = f('n', { n: 1, s: '' }); // value type is (string | number)

在这种情况下,我希望
value
类型为
number
,因为键
n
指向
number
属性

您可以通过使用
f
函数的通用语法来实现这一点。对于一个匿名函数,您可以执行以下操作:

const f = <O, K extends keyof O>(key: K, o: O) => o[key];

伟大的!所以这个解决方案不依赖于接口本身,对吗?谢谢,这很有效!而且
O
不需要是泛型。你可以这样做:
f=(key:K,o:o)=>o[key]
。但是我不明白为什么它能工作,而这个不能:
f=(key:keyof,O:O)=>O[key]
const value = f('n', { n: 1, s: '' }); // value type is: number
const other = f('s', { n: 1, s: '' }); // other type is: string