【问题标题】:Error using mobx-state-tree + yup with typescript (SchemaOf with SnapshotOut not working!!)将 mobx-state-tree + yup 与 typescript 一起使用时出错(带有 SnapshotOut 的 SchemaOf 不起作用!!)
【发布时间】:2021-09-21 05:07:56
【问题描述】:

我正在尝试将 Yup + Mobx-state-tree 与 Typescript 一起使用……但对于简单的情况,我遇到了错误……

const UserNameModel = types.model({
    name: types.string,
});
type UserNameModelSnapshot = SnapshotOut<typeof UserNameModel>;

const riderman: UserNameModelSnapshot = {
    name: 'a',
};
// WORKS FINE, riderman.name is a string


// Error on userNameSchema
const userNameSchema: SchemaOf<UserNameModelSnapshot> = yup.object({
    name: yup.string().required().defined().min(3),
});

错误

TS2322:类型 'OptionalObjectSchema>; }, Record, TypeOfShape>; }>>' 不可分配给类型 'ObjectSchemaOf>'。属性“字段”的类型不兼容。类型“{ 名称:DefinedStringSchema>; }' 但在类型 '{ name: BaseSchema; 中是必需的; [$nonEmptyObject]: BaseSchema | ArraySchema |懒惰<...>,AnyObject,未知[] |未定义,未知[] |未定义> | ObjectSchemaOf<...> | ObjectSchemaOf<...>; }'。


我也试过

const userNameSchema = yup.object<UserNameModelSnapshot>({
    name: yup.string().required().defined().min(3),
});

但在UserNameModelSnapshot

上收到错误

TS2344: 类型 'ModelSnapshotType' 不满足约束“ObjectShape”。 'ModelSnapshotType'。


我也试过

const UserNameModel = types.model({
    name: types.string,
});
type UserNameModelSnapshot = Instance<typeof UserNameModel>;

const userNameSchema = yup.object<UserNameModelSnapshot>({
    name: yup.string().required().defined().min(3),
});

但是在UserNameModelSnapshot

上得到错误

TS2344:键入'{名称:字符串; } & NonEmptyObject & IStateTreeNode>' 不满足约束“ObjectShape”。类型 '{ name: string; 中缺少索引签名; } & NonEmptyObject & IStateTreeNode>'。

【问题讨论】:

  • 那么除了我建议的以外,你有没有找到其他解决方案?

标签: typescript mobx yup mobx-state-tree


【解决方案1】:

你可以使用这个技巧:

type UserNameModelSnapshot = Omit<SnapshotOut<typeof UserNameModel>, symbol>;

其他我不太清楚如何摆脱 MST 添加的特殊字段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 2021-04-25
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 2022-11-12
    相关资源
    最近更新 更多