Typescript 是否可以将参数强制为特定类型的键?
假设我们有以下lodash用途:Typescript 是否可以将参数强制为特定类型的键?,typescript,Typescript,假设我们有以下lodash用途: type Baz = { sortOrder: number } const baz: Baz; _.chain(baz) .sortBy("sortOrder") .value(); 是否可以将“sortOrder”限制为Baz的键而不重写。sortBy类型定义,或者必须根据您的请求将“sortOrder”提取为变量?: 不重写.sortBy类型定义 您的最佳选择是使用函数包装功能 function sortBy<T, K
type Baz = {
sortOrder: number
}
const baz: Baz;
_.chain(baz)
.sortBy("sortOrder")
.value();
是否可以将“sortOrder”
限制为Baz的键而不重写。sortBy
类型定义,或者必须根据您的请求将“sortOrder”
提取为变量?:
不重写.sortBy
类型定义
您的最佳选择是使用函数包装功能
function sortBy<T, K extends keyof T>(key: K, arr: T[]) {
return _.chain(arr)
.sortBy(key)
.value();
}
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);