Knex在TypeScript中的OrderBy

问题描述

我正在尝试学习如何实现高级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游乐场https://tsplay.dev/lm0Lam

中看到此代码