Knex 在 TypeScript 中的 OrderBy

Knex's OrderBy in TypeScript

我正在尝试学习如何实现高级 Typescript 类型

knex.js中,orderBy的一种实现是以下

的数组
{ column: string, order: "asc" | "desc" }

我想构建一个打字稿类型

type OrderBy<T> = {
  column: K in keyof T;
  order?: "asc" | "desc";
}

因此,如果 T 是 { "propA": true, "propB": 1 },它会智能感知 column 应该是 "propA""propB",顺序是 "asc""desc".

不幸的是,它不起作用。我尝试使用现有的实现,但要么它们不够具体,要么我不明白它是如何工作的。

我将如何实施它?

要获取通用 T 中的键,您只需要 keyof T,您的代码将如下所示:

interface Column { "propA": true, "propB": 1 }

type OrderBy<T> = {
  column: keyof T;
  order?: "asc" | "desc";
}

// Since knex's OrderBy is an array, your code could be like
const knex: Array<OrderBy<Column>> = [{ column: "propA", order: "asc"  }]

你可以在TS playground看到这段代码https://tsplay.dev/lm0Lam