reactjs - 如何在打字稿中为领域对象中的可选字段声明类型?
问题描述
假设我在架构中有以下定义:
export const ItemSchema = {
name: 'item',
properties: {
_id: 'objectId',
sku: 'string?',
name: 'string',
updateDatetime: 'date',
creationDatetime: 'date',
},
primaryKey: '_id',
};
在这种情况下,字段 sku 是可选的。我应该如何使用打字稿在界面中声明字段?
我现在有三个选择。
将 sku 设为可为空:
export interface Item {
_id: ObjectId;
sku: string | null;
name: string;
updateDatetime: Date;
creationDatetime: Date;
}
将 sku 作为可选:
export interface Item {
_id: ObjectId;
sku?: string;
name: string;
updateDatetime: Date;
creationDatetime: Date;
}
将 sku 设为可选且可为空:
export interface Item {
_id: ObjectId;
sku?: string | null;
name: string;
updateDatetime: Date;
creationDatetime: Date;
}
从我的角度来看,任何做这件事的方式基本上都是一样的,但是因为我总是做 upserts,所以这些值并不意味着相同。对于此代码:
realm.write(() => {
realm.create<Item>('item', item, UpdateMode.Modified)
}
- 如果 sku 未定义(item 中不存在值或字段),则不会更新该值。
- 如果 sku 为 null,则该值将设置为 null。
那么,在我的应用程序中声明类型以处理它的正确方法应该是什么?
解决方案
- 如果 sku 未定义(item 中不存在值或字段),则不会更新该值。
- 如果 sku 为 null,则该值将设置为 null。
要使该功能起作用,您需要该字段既可以是undefined
or null
,也可以是string
。
所以这两个不起作用:
{ sku: string | null } // can't be undefined
{ sku?: string } // can't be null
这意味着你需要这个表格:
{ sku?: string | null; }
?
说它可以被省略(在这种情况下它是)undefined
,并且| null
说它可以显式设置为空。
这是唯一支持以下所有内容的类型:
{} // ignore sku
{ sku: undefined } // ignore sku
{ sku: null } // write null to sku
{ sku: 'abc123' } // write string to sku
推荐阅读
- android - 有一个包含线性布局的水平滚动视图,线性布局内动态创建的 Imageview 有问题
- java - 如何将私钥存储在android密钥库中?
- c# - 浮点到 C# 中的小端转换
- python - 如何修复 AttributeError:“Mapper”对象没有属性“persist_selectable”
- time - 如何在 vue2-datepicker 中设置时区?
- three.js - 迭代地向一个点螺旋
- angular6 - 当用户在ng2-smart-table中添加数据时单击取消按钮时如何清除所有用户数据?
- javascript - 只允许输入字母或数字
- android - 格式错误的 URL 异常:无协议
- python - 从python中两个数字之间的字典中获取所有键