有两件事:
-
CompareFn
不是普通的
<T>
-
任何特定的
比较
下面是一个更正的版本,其中有注释,指出了更改/添加:
interface hasLength {
length: number;
}
type CompareFn<T> = (a: T, b: T) => boolean
// ^^^
const compare = (compareFn: CompareFn<hasLength>, a: hasLength, b: hasLength) =>
// ^^^^^^^^^^^
compareFn(a, b)
const compareFn: CompareFn<hasLength> = (a, b) => a.length === b.length
// ^^^^^^^^^^^
const otherCompare: CompareFn<any> = (a, b) => a === b
// ^^^^^
console.log(compare(compareFn, [1], [2]))
console.log(compare(compareFn, 'a', 'b'))
console.log(compare(otherCompare, [1], [2]))
On the playground
旁注:按照压倒性的惯例,
hasLength
应该是
HasLength
. 接口和类名以大写字母开头(同样,按惯例)。