类型“MyType”不满足约束“ObjectShape”。 “MyType”类型中缺少“字符串”类型的索引签名

所以,我最近升级了

  • "yup": "^0.29.1" => "yup": "^0.32.11"
  • "@types/yup": "^0.29.3" => "@types/yup": "^0.29.13",

现在我所有的 Schemas 都坏了。我将提供一个示例,打字稿正在哭泣:

export interface MyType {
  id: number;
  name: string;
  description: string | null;
}

export const mySchema = yup
  .object<MyType>({
    id: yup.number().required(),
    name: yup.string().trim().required().max(50),
    description: yup.string().trim().max(200).defined(),
  })
  .required();

打字稿错误:

TS2344: Type 'MyType' does not satisfy the constraint 'ObjectShape'. Index signature for type 'string' is missing in type 'MyType'.

我在这里想念什么?

stack overflow Type 'MyType' does not satisfy the constraint 'ObjectShape'. Index signature for type 'string' is missing in type 'MyType'
原文答案

答案:

作者头像

不要指定对象的接口,而是使用 Record - <Record<keyof MyType, yup.AnySchema>> 对形状执行此操作。所以你的代码看起来像这样:

export const mySchema = yup
  .object().shape<Record<keyof MyType, yup.AnySchema>>({
    id: yup.number().required(),
    name: yup.string().trim().required().max(50),
    description: yup.string().trim().max(200).defined(),
  })
  .required();

到目前为止,我还没有找到更好的解决方案。

相关问题