![](/img/trans.png)
[英]Typescript Why this recursive map type does not satisfy the constraint?
[英]Why does TypeScript ignore the type constraint?
我们定义了get(o, key, default_value)
function,它应该与满足{ get: (key: K, default_value: D) => R }
接口的任何 Object 一起使用。
TypeScript 应该验证只有这样的对象才能传递给get
function。
但它也允许传递{ get: (key: K) => R }
object,这是错误的。
function get<K, D, R>(
o: { get: (key: K, default_value: D) => R }, key: K, dvalue: D
): R {
return o.get(key, dvalue);
}
class Params {
constructor(public values: { [key: string]: number }) { }
get(key: string): number | undefined {
return this.values[key]
}
}
const params = new Params({ a: 10 });
console.log(get(params, "a", 5))
为什么它会忽略约束并允许这样的代码编译? 有没有办法强制执行约束?
这是因为: (key: K) => R
是(key: K, default_value: D) => R
的子类型,因此可以将前者的实例分配给后者。 请参阅比较两个函数。 当这个赋值发生时,它基本上意味着忽略传递给 function 的额外参数,这在 javascript 中很常见。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.