如何在打字稿中为领域对象中的可选字段声明类型?
How to declare types for optional fields in realm objects in typescript?
假设我在架构中有以下定义:
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;
}
从我的角度来看,任何方式都基本相同,但因为我总是做更新,所以值并不意味着相同。对于此代码:
realm.write(() => {
realm.create<Item>('item', item, UpdateMode.Modified)
}
- 如果sku未定义(item中不存在该值或字段),则不会更新该值。
- 如果 sku 为空,则该值将设置为空。
那么,在我的应用程序中声明处理它的类型的正确方法应该是什么?
- If sku is undefined (the value or field doesn't exists in item), the value will not be updated.
- If sku is null the value will be set to null.
要使该功能正常工作,您需要该字段既可以是 undefined
也可以是 null
,也可以是 string
.
所以这两个行不通:
{ sku: string | null } // can't be undefined
{ sku?: string } // can't be null
这意味着您需要此表格:
{ sku?: string | null; }
?
表示可以省略(在这种情况下是undefined
),| null
表示可以显式设置为null。
这是唯一支持以下所有内容的类型:
{} // ignore sku
{ sku: undefined } // ignore sku
{ sku: null } // write null to sku
{ sku: 'abc123' } // write string to sku
假设我在架构中有以下定义:
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;
}
从我的角度来看,任何方式都基本相同,但因为我总是做更新,所以值并不意味着相同。对于此代码:
realm.write(() => {
realm.create<Item>('item', item, UpdateMode.Modified)
}
- 如果sku未定义(item中不存在该值或字段),则不会更新该值。
- 如果 sku 为空,则该值将设置为空。
那么,在我的应用程序中声明处理它的类型的正确方法应该是什么?
- If sku is undefined (the value or field doesn't exists in item), the value will not be updated.
- If sku is null the value will be set to null.
要使该功能正常工作,您需要该字段既可以是 undefined
也可以是 null
,也可以是 string
.
所以这两个行不通:
{ sku: string | null } // can't be undefined
{ sku?: string } // can't be null
这意味着您需要此表格:
{ sku?: string | null; }
?
表示可以省略(在这种情况下是undefined
),| null
表示可以显式设置为null。
这是唯一支持以下所有内容的类型:
{} // ignore sku
{ sku: undefined } // ignore sku
{ sku: null } // write null to sku
{ sku: 'abc123' } // write string to sku