在Typescript中将嵌套属性访问键入为点字符串

时间:2018-09-26 22:40:24

标签: typescript

我正在尝试确定是否可以在Mongo中键入嵌套属性查询。

例如,如果我具有以下类型:

class User {
   username: string
   _id: string
   emails: {
      primary: {
         address: string,
         verified: boolean
      }
   }
}

我输入的内容适用于单一属性访问,例如,由于“ usernametypo”不是User的属性,因此将标记以下查询:

const someUser = usersCollection.findOne({usernametypo: "foobar"})

通过主电子邮件地址查找用户的正确Mongo查询如下所示:

const someUser = usersCollection.findOne({"emails.primary.address": "foo@bar.com"})

这就是问题所在。如何为该查询定义类型?鉴于User类的结构,如何告诉TS“ emails.primary.address”确实有效?

编辑:似乎有一些建议的打字稿功能可能对https://github.com/Microsoft/TypeScript/issues/12754

有帮助

1 个答案:

答案 0 :(得分:1)

您无法在TypeScript中描述此类型。 TypeScript没有字符串串联或类似的字符串。

Mongo是一件大事,如果可能的话,维护@types/mongo的人早就做到了。