繁体   English   中英

为什么 TypeScript 会忽略类型约束?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM