Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 是否可以将参数强制为特定类型的键?_Typescript - Fatal编程技术网

Typescript 是否可以将参数强制为特定类型的键?

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

假设我们有以下lodash用途:

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);