我想创建一个Projection<T>描述对象的类型,该对象的属性只能是number(0或1)或该属性类型的Projection。
例:
给定类型:
interface Person {
name: string;
address: Address
}
interface Address {
street: string;
country: string;
}
Run Code Online (Sandbox Code Playgroud)
该Projection<Person>会是:
const p: Projection<Person> = { // this is a Projection<Person>
name: 1,
address: { // this is a Projection<Address>
street: 0,
country: 1
}
}
Run Code Online (Sandbox Code Playgroud)
打字稿有可能吗?我陷入了递归投影部分
export type Projection<T> = { [K in keyof T]?: number | Projection<???> };
Run Code Online (Sandbox Code Playgroud)
使用number | Projection<any>Works,但当然不会检查声明的字段是否属于Address
我相信你在找什么
type Projection<T> = { [K in keyof T]: number | Projection<T[K]> };
Run Code Online (Sandbox Code Playgroud)
另外,如果原始结构中的字段始终是字符串,则可以通过编写以下内容使其更具体:
type Projection<T> = { [K in keyof T]: T[K] extends string ? number : Projection<T[K]> };
Run Code Online (Sandbox Code Playgroud)
而且,如果字段并非总是字符串,则可以尝试:
type Projection<T> = { [K in keyof T]: T[K] extends object ? Projection<T[K]> : number };
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29 次 |
| 最近记录: |