[英]Typescript define type with function test
我正在嘗試創建允許我只搜索特定事物的類型。
假設我有這個 model 和數據:
interface UserModel {
_id: string;
username: string;
party: UserPartyModel;
}
interface UserPartyModel {
invites: number;
rsvps: number;
}
//Test Data
{
_id: '123',
username: 'testuser',
party: {
invites: 18,
rsvps: 3
}
}
使用 mongodb,我可以查詢根屬性:
db.users.findOne({_id: '123'});
db.users.findOne({username: 'testuser'});
所以我創建了這個類型來捕獲不在我的 model 中的錯誤:
export declare type MongoManagerFilter<T> = {
[P in keyof T]?: T[P];
};
Mongodb 還允許您在 object 中進行搜索,例如:
db.users.findOne({'party.invites': 18});
如您所見,現在我使用的是以前的類型MongoManagerFilter
,我收到一個錯誤,即UserModel
中不存在'party.invites'
。
所以我想做的是像這樣運行 function :
function isDotStringRegExp(obj: Object, dotKey: string): boolean {
let keyData = dotKey.split('.');
let objData = obj;
for (let i = 0; i < keyData.length; i++) {
let key = keyData[i];
if (objData.hasOwnProperty(key)) {
objData = objData[key];
if (i === keyData.length - 1) {
return true;
}
}
else {
return false;
}
}
}
然后添加另一種類型來執行此操作:
export declare type MongoManagerDotStringFilter<T> = {
[key: string]: (isDotStringRegExp(T, key) ? any : never);
};
不幸的是,它不允許我以這種類型運行isDotStringRegExp
function。
我如何實現這一目標?
您不能使用類型調用 function。 所以 function 調用isDotStringRegExp(T, key)
是不可能的,因為T
和key
都是類型。
如果您想使用點符號進行類型安全訪問,請查看以下問題: https://stackoverflow.com/a/68412497/10857778
如果您正在尋找如何使用 Mongo 執行此操作,請查看我的另一個線程,特別是操場代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.