typescript - 为什么使用类型别名定义的对象 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 interface
vs a定义的,我会得到不同的结果type alias
?在这种情况下,如何使其与界面一起使用?
解决方案
推荐阅读
- python - 以下代码的时间复杂度是多少?O(nlogn) 还是 O(N)?复杂度 O(nlogn) 是什么时候?
- .net - XSLT - 用逗号对数字求和
- java - 如何在创建过程中将对象注册到 ArrayList
- r - R编程:返回ggplot对象而不是grob?
- json - 如何使用 url.Values 为 api 请求生成深度嵌套的字段?
- javascript - 是否可以从 github 版本中导入 deno 中的模块?
- python - 为什么我的导入器 python 库说“没有属性”?
- python - VS Code 怎么会自动激活 virtualenv?
- jestjs - 尽管在 package.json 中进行了配置,但在 monorepo 中对应用程序的 Nestjs e2e 测试无法使用 jest 从库中解析 @app 导入
- javascript - 在 Android 中当前打开的 Chrome 选项卡中运行 JavaScript