首页 > 解决方案 > 为什么使用类型别名定义的对象 extends { [key: string]: unknown } 而使用接口定义的对象却没有?

问题描述

我有以下函数,它应该采用多种类型的对象数组并返回该数组的排序结果。由于它可能接收许多对象类型,我希望它是通用的。

打字稿游乐场

因此,以下内容:<T extends GENERIC_OBJECT>arr: T[]

interface GENERIC_OBJECT {
  [key: string]: unknown
}

export function sortArray<T extends GENERIC_OBJECT>
(arr: T[]) : T[] {
    return arr.sort();
}

它应该工作正常。但是有一种奇怪的行为。

看到这个:

在此处输入图像描述

看看结果:

在此处输入图像描述

interface对象类型不起作用。并且type alias对象类型有效。

查看错误:

在此处输入图像描述

文本格式的错误消息:

“OBJECT_V1[]”类型的参数不能分配给“GENERIC_OBJECT[]”类型的参数。类型“OBJECT_V1”不可分配给类型“GENERIC_OBJECT”。'OBJECT_V1' 类型中缺少索引签名。(2345)

问题

为什么我的对象类型是使用 an interfacevs a定义的,我会得到不同的结果type alias?在这种情况下,如何使其与界面一起使用?

标签: typescriptinterfacetypescript-genericstype-alias

解决方案


推荐阅读