TypeScript 泛型方法签名:添加内联约束,以便值既是对象键名又是字符串



如何更改sortArrayItemsByDate的签名(内联(,从而引入以下附加约束(累积(:

  1. T应该有一个名为propName的键(值位于对象键名中(
  2. T[propName]应为字符串(同时(

链接到StackBlitz游乐场

const sortArrayItemsByDate = <T>(items: T[], propName: string): T[] =>
items.sort((a: T, b: T) => Date.parse(a[propName]) - Date.parse(b[propName]));

interface StudentModel {
name: string;
birthday: string;
}
const s0: StudentModel = {
name: "Peter",
birthday: "2001-11-23",
};
const s1: StudentModel = {
name: "John",
birthday: "2003-11-30",
};
const students: StudentModel[] = [s0, s1];
const studentsSorted = sortArrayItemsByDate(students, 'birthday');

约束T以扩展Record<keyof T,string>并制作propNamekeyof T

const sortArrayItemsByDate = <T extends Record<keyof T,string>>(items: T[], propName: keyof T): T[] =>
items.sort((a: T, b: T) => Date.parse(a[propName]) - Date.parse(b[propName]));

最新更新