【发布时间】:2020-11-12 14:25:21
【问题描述】:
我有以下
sortByCounter = (ps: any) => {
return Object.values(ps).sort(
(a: any, b: any) => {
return (a.Counter >= b.Counter)
? -1 : 1;
}
);
}
这导致打字稿说
Property 'Counter' does not exist on
type 'unknown'.
我之所以不只是为带有 Counter 的对象创建一个接口,是因为对象上还有很多其他可能的属性。
我已经尝试过How do I dynamically assign properties to an object in TypeScript? 中描述的 LooseObject 解决方案,但是(将所有任何都替换为 LooseObject)但它仍然一直告诉我 Counter 在未知类型上不存在。
事实上,我还没有在任何地方使用该代码,只是它的存在(VS Code 说这很好)导致 typescript 使我的应用程序崩溃。
【问题讨论】:
-
如果你要使用这样的代码,我想知道你为什么要使用 TypeScript?最好正确键入函数
-
你在你的包 json 中使用了哪个版本的打字稿,VS 代码使用的是哪个版本?因为如果您将代码复制并粘贴到打字稿游乐场,它会正常工作
-
警告 - 您的排序比较器有问题。它从不处理相等性,所以它只产生两个值,更大或更小。两个相等的值会被错误地认为是“更大的”。这可能会欺骗排序算法,并在排序时导致难以发现和诊断的细微错误。
-
@user254694 比较器函数需要生成 三个 值 - 更大(负)、更小(正)和等于(零)。您只产生两个值 - 更大和更小。相等情况的处理就好像它更大一样。因此,您的比较器函数不再对称 -
compare(a, b)不一定与compare(b, a)相反。排序算法可能采取的任何捷径都依赖于关于项目如何相互排序的推断,以最小化所做的比较。但是,错误的比较算法可能会导致推理失败。 -
@user254694 在 VS 代码中打开 *.ts 文件并查看 VS 代码的右下角,你应该可以找到)
标签: typescript