假设我们有以下lodash用法:
type Baz = {
sortOrder: number
}
const baz: Baz;
_.chain(baz)
.sortBy("sortOrder")
.value();
是否可以在不覆盖"sortOrder"
类型定义的情况下将keyof Baz
限制为.sortBy
,还是必须将"sortOrder"
提取到变量?
答案 0 :(得分:1)
根据您的要求:
不覆盖
.sortBy
类型定义
您最好的选择是使用函数包装功能吗?
function sortBy<T, K extends keyof T>(key: K, arr: T[]) {
return _.chain(arr)
.sortBy(key)
.value();
}
允许部分应用sortBy
会更好。因此,您可以使用函数sortBy
来定义其他函数,例如sortByAge
和sortByName
:
const sortBy = <T, K extends keyof T>(key: K) => (arr: T[]) => {
return _.chain(arr)
.sortBy(key)
.value();
}
interface Person {
name: string;
age: number;
}
const sortByAge = sortBy<Person, "age">("age");
const sortByName = sortBy<Person, "name">("name");
// Error Type '"namr"' does not satisfy the constraint '"age" | "name"'.
const sortByWrongKey = sortBy<Person, "namr">("namr");
const people: Person[] = [
{ name: "John", age: 30 },
{ name: "Jack", age: 27 }
];
const peopleSortedByAge = sortByAge(people);
const peopleSortedByName = sortByName(people);