我试图按范围过滤弹性搜索中的_id字段(索引未启用).可能吗?如果是这样,怎么办?我在弹性搜索文档中读到,我们可以使用'id'来查询_id和类型,但我看不出如何使用范围过滤器.(我不想在_id上启用索引).
{
"from": 0,
"size": 20,
"query": {
"match_all": {}
},
"filter": {
"range": {
"_id": {
"gt": "51f7b6b7710c42b136027581"
}
}
},
"sort": {
"pubdate": {
"order": "desc"
}
}
}
Run Code Online (Sandbox Code Playgroud) 给定具有x1共同字段的接口或类 A 和 B
interface A {
a1: number;
x1: number; // <<<<
}
interface B{
b1: number;
x1: number; // <<<<
}
Run Code Online (Sandbox Code Playgroud)
并给出实现 a 和 b
let a: A = {a1: 1, x1: 1};
let b: B = {b1: 1, x1: 1};
Run Code Online (Sandbox Code Playgroud)
打字稿允许这样做,即使 b1不是A 的一部分:
let partialA: Partial<A> = b;
Run Code Online (Sandbox Code Playgroud)
你可以在这里找到为什么会发生这种情况的解释:为什么 Partial 接受来自另一种类型的额外属性?
是否可以替代 Partial 只接受另一种类型的字段而不接受其他类型的字段(尽管不需要所有字段)?像StrictPartial?
这在我的代码库中造成了很多问题,因为它根本没有检测到错误的类作为参数传递给函数。
给定接口 A 和 B,它们包含一个x1共同的属性
interface A {
a1: number;
a2: number;
x1: number; // <<<<
}
interface B{
b1: number;
x1: number; // <<<<
}
Run Code Online (Sandbox Code Playgroud)
并给出了实现a和b
let a: A = {a1: 1, a2: 1, x1: 1};
let b: B = {b1: 1, x1: 1};
Run Code Online (Sandbox Code Playgroud)
这只是通过,即使b1不属于Partial<A>:
let partialA: Partial<A> = b;
Run Code Online (Sandbox Code Playgroud)
但这失败了,因为b1不属于Partial<A>:
let partialA: Partial<A> = {b1: 1, x1: 1};
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我为什么吗?
我想创建一个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