javascript - 为什么我的基于重载函数的 Eq 约束不能正确推断?
问题描述
这是使用重载函数作为通用高阶函数的等式约束的简单尝试:
function eq(x: boolean, y: boolean): boolean;
function eq(x: number, y: number): boolean;
function eq(x: string, y: string): boolean;
function eq(x: any, y: any) { return x === y };
const arrEq = <A>(eq: (x: A, y: A) => boolean) => (xs: A[]) => (ys: A[]) => {
const go = (b: boolean, i: number): boolean =>
b === false ? false
: i === xs.length ? true
: go(eq(xs[i], ys[i]), i + 1);
return go(true, 0)
};
arrEq(eq) ([1, 2, 3]) ([1, 2, 3]); // A
在行A
中,类型变量A
被推断为string
,这似乎很随意。我怎样才能解决这个问题?
解决方案
推荐阅读
- html - @media only screen and (max-width: --px) not working?
- wordpress - Udating custom WooCommerce mini cart when cart contents get changed
- angular - Importing Semantic-UI only CSS in an Angular (v8.0.0) project
- c++ - 如何修复 Qt Visual Studio 工具“对象引用未设置为对象的实例”?
- vue.js - VueJS 元素填充回调
- mysql - 如何删除数据库上带有标志或不带标志的记录?
- python - 没有运算符与给定的名称和参数类型匹配。- Django F() 表达式
- javascript - 有没有办法使用谷歌应用脚本制作自定义警报按钮?
- c++ - 调车场算法 C++
- javascript - 如何在Javascript中将输入值与数组名称进行比较