Mongodb 当类型=A | B时,它将启用两者的组合。这能预防吗?
我想在typescript中说,mongodb中的查找可以通过键匹配,也可以通过管道:Mongodb 当类型=A | B时,它将启用两者的组合。这能预防吗?,mongodb,typescript,Mongodb,Typescript,我想在typescript中说,mongodb中的查找可以通过键匹配,也可以通过管道: type Lookup<T> = { $lookup: | { from: keyof typeof Collections; localField: string; foreignField: string; as: string; } | { from: keyof typeof C
type Lookup<T> = {
$lookup:
| {
from: keyof typeof Collections;
localField: string;
foreignField: string;
as: string;
}
| {
from: keyof typeof Collections;
let: { [k: string]: string };
pipeline: Aggregation<T>[];
as: string;
};
};
类型查找={
$lookup:
| {
from:集合类型的键;
localField:string;
外域:字符串;
as:字符串;
}
| {
from:集合类型的键;
let:{[k:string]:string};
管道:聚合[];
as:字符串;
};
};
但结果是两者的结合。
当我已经有localField
时,我不希望typescript向我显示管道
或let
选项
我怎样才能做到这一点
谢谢为了明确区分工会成员,我们需要适当的帮助。这意味着我们需要附加一个鉴别器,它将清楚地将一个成员与另一个成员区分开来。考虑到属性定义为“代码>标签TA/代码>这样的小更改:
type Lookup<T> = {
$lookup:
| {
tag: 'A',
from: keyof typeof Collections;
localField: string;
foreignField: string;
as: string;
}
| {
tag: 'B',
from: keyof typeof Collections;
let: { [k: string]: string };
pipeline: Aggregation<T>[];
as: string;
};
};
类型查找={
$lookup:
| {
标签:“A”,
from:集合类型的键;
localField:string;
外域:字符串;
as:字符串;
}
| {
标签:“B”,
from:集合类型的键;
let:{[k:string]:string};
管道:聚合[];
as:字符串;
};
};
由于使用了判别式标记
,因此无法传递具有混合值的对象
歧视性结合是解决问题的正确方式,但我们也可以在类型层面上施展一些魔力。考虑:
//简化类型
A型={
a:弦,
b:弦;
c:字符串;
}
B类={
a:弦,
d:弦,
e:字符串
}
//我还制作了单机版
X型=A | B型
//键入将执行此任务的类型
类型独占={
[K in keyof T]:K扩展A?T的keyof[K]:从不
} | {
[K in keyof T]:K扩展了B?T的keyof[K]:从不
}
//只允许非混合值的函数
函数测试(x:Exclusive){return x}
试验({
a:‘a’,
b:‘b’,
d:‘d’,
e:‘e’
})//错误,因为这是一个混音,谢谢!知道这一点很好,但不幸的是,我必须保持正确的语法,不能添加这样一个键。另一个解决方案是使用类型系统dark places。考虑阅读这个