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
我正在尝试学习如何实现高级 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