Mongoose typescript 无法检测无效密钥

问题描述 投票:0回答:1

我使用打字稿和猫鼬 但猫鼬无法检测无效键并将所有打字稿键更改为部分

模型.ts

type Coin = {
    symbol: string;
    name: string;
}

interface IDocument extends Coin {}

const Schema: mongoose.Schema<IDocument> = new mongoose.Schema({
  symbol: String,
  noItem: Number,
});

2个问题:

1-为什么符号和名称更改为部分键/值?

2-为什么猫鼬无法检测到错误的密钥?

noItem

node.js typescript mongodb mongoose
1个回答
0
投票

在您的 Mongoose Schema 定义中,您仅定义了 Coin 类型的符号字段,但不包括名称。因此,TypeScript 将 Mongoose 文档的类型推断为 Partial,这意味着所有属性都是可选的。要解决此问题,请确保您的 Mongoose 架构包含您的 Coin 类型的所有属性。请记住,打字稿类型仅在编译时出现,而不是在运行时出现,因此您无论如何都需要显式定义模式中的每个项目,以进行运行时验证。

当您在模式中定义 TypeScript 界面中不存在的字段时,Mongoose 不会抛出错误。这是因为 Mongoose 架构非常灵活,允许您定义 TypeScript 类型未严格强制执行的属性。模式是真理的来源。

您在这里定义一个模式,因此在我看来,显式定义每个属性是很好的。当您想使用模式向模型添加项目时,只需确保使用 IDocument 或 coin 类型创建它,这样您将收到缺少/无效属性的 ts 错误。

© www.soinside.com 2019 - 2024. All rights reserved.