【问题标题】:How to allow assignment of incompatible Typescript types?如何允许分配不兼容的 Typescript 类型?
【发布时间】:2020-08-04 03:03:35
【问题描述】:

我在我的服务器和前端之间共享类型定义。它们在一个单独的 npm 包中定义,两者都安装。在前端,保存 ObjectIds 的变量需要这样输入,但在客户端,我可以假设它们始终是原始字符串。

我在客户端上有很多地方会抛出:

Type 'ObjectId' is not assignable to type 'string'.

处理此错误的最简单方法是什么?我可以告诉 Typescript 接受对 ObjectId 的字符串分配,反之亦然吗?我应该尝试覆盖 ObjectId 的 Mongoose 定义吗?

我正在考虑覆盖排序

declare global {
    export interface MyInterface1 {
        variableWithObjectId1: string
    }
    export interface MyInterface2 {
        variableWithObjectId2: string
    }
}

我认为这应该可行。这是similar issue 的推荐解决方案,但我还没有完成。

我希望在将库导入客户端时,有某种方法可以将 ObjectId 全局转换为字符串。

【问题讨论】:

  • ObjectId 类型是什么?
  • Mongo 虽然定义来自 Mongoose
  • 接口定义中的myId: ObjectId | string 怎么样。
  • 感谢您的想法 - 当您想使用 Mongo ObiectId 方法时,该解决方案会通过服务器上的错误

标签: mongodb typescript mongoose


【解决方案1】:

ObjectId 和 String 根本不是同一种类型,因此不能简单地从一个分配给另一个。

您需要执行正确的转换。

【讨论】:

  • 如果我可以绝对确定它们是字符串,那么进行转换的最简单方法是什么? (在客户端上,而不是在定义它们的外部库中)
  • 用您为此问题所做的研究更新您的问题。
【解决方案2】:

对于客户端上的这些错误中的每一个,我都将类型转换为类似的字符串

var stringId = (myVariable as unknown) as string

我希望有比这更干净的方法,所以如果有人有建议,我会全力以赴。

【讨论】:

    猜你喜欢
    • 2021-07-05
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 2020-06-30
    • 2011-01-12
    • 1970-01-01
    相关资源
    最近更新 更多