gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 23:45:28 25 4
gpt4 key购买 nike

我们定义了 get(o, key, default_value)应该与满足 { get: (key: K, default_value: D) => R } 的任何对象一起使用的函数界面。
TypeScript 应该验证只有这样的对象才能传递给 get功能。
但它也允许传递 { get: (key: K) => R }对象,这是错误的。

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 的子类型因此可以将前者的实例分配给后一种类型。见 comparing two functions .当这个赋值发生时,它基本上意味着忽略传递给函数的额外参数,这在 javascript 中很常见。

关于typescript - 为什么 TypeScript 会忽略类型约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63044797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com