function c<N extends Record<string,any>>(n: N) {
n.x = 123;
}
环境为ts4.6, 提示n上没有x属性.
补充:
我开始说的提问有问题, 我不是想知道为什么, 我想知道如何解决, 上面的例子是我简化的, 为了方便大家看,
实际的需求: 要通过泛型来获取参数的类型, 然后标注成返回值, 但是代码内部, 我必须要对n上的"x"操作, 这个x实际是个变量, 是个string类型.
function c<N extends Record<string,any>>(n: N) {
n.x = 123;
}
环境为ts4.6, 提示n上没有x属性.
补充:
我开始说的提问有问题, 我不是想知道为什么, 我想知道如何解决, 上面的例子是我简化的, 为了方便大家看,
实际的需求: 要通过泛型来获取参数的类型, 然后标注成返回值, 但是代码内部, 我必须要对n上的"x"操作, 这个x实际是个变量, 是个string类型.
N是Record<string, any>的子类型,既然是子类型,那就可能不存在x,你的N是一个泛型,它可能是任意的Record的子类型,所以可能不存在x,这没问题。如果你的n是任意的对象,那就不要用泛型,直接:
function c(n: Record<string,any>) {
n.x = 123;
}
这样n就是Record类型,很明确的,这样你附什么属性都可以
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
因为你只告诉它是满足key是string的记录呀。那么这个对象可以没有key咯。即便有,也未必是x咯,可以是其他的string。