我有一个类型和一个该类型的对象数组。“不幸的是”该类型中的一些键是可选的。这破坏了我的动态排序函数。我如何使它工作呢?我不会用这些可选键调用它,所以如果函数在这种情况下不排序或排序错误也是可以的。
export type Test = {
adam: string;
eve?: string;
};
export type Container = {
test: Array<Test>;
};
const testContainer = {} as Container;
export function sortTest(prop: keyof Test) {
testContainer.test.sort((a, b) => {
if (a[prop] === undefined || b[prop] === undefined || !(prop in b) || !(prop in a)) {
return 0;
} else {
return a[prop] > b[prop] ? -1 : b[prop] > a[prop] ? 1 : 0;
}
});
}
正如你所看到的,我尝试了两种不同的方法来确保prop
是a
和b
的一部分。这两种方法都不起作用。我总是得到ts 2532 -对象可能在实际的排序行上“未定义”。
链接到Playground
1条答案
按热度按时间9w11ddsr1#
需要将
a[prop]
和b[prop]
保存到变量中:从这里:
这实际上并不是专门针对TS 2532,而是针对一般的类型收缩--TS不会将任何涉及
obj[key]
的检查视为类型保护,除非key
是一个文字。