#reactjs #typescript #react-native #realm
Вопрос:
Допустим, у меня есть следующее определение в схеме:
export const ItemSchema = {
name: 'item',
properties: {
_id: 'objectId',
sku: 'string?',
name: 'string',
updateDatetime: 'date',
creationDatetime: 'date',
},
primaryKey: '_id',
};
В этом случае поле артикул является необязательным. Как я должен объявить поле в интерфейсе с помощью typescript?
Сейчас у меня есть три варианта.
Наличие артикула, подлежащего аннулированию:
export interface Item {
_id: ObjectId;
sku: string | null;
name: string;
updateDatetime: Date;
creationDatetime: Date;
}
Наличие артикула в качестве опции:
export interface Item {
_id: ObjectId;
sku?: string;
name: string;
updateDatetime: Date;
creationDatetime: Date;
}
Наличие артикула в качестве необязательного и обнуляемого:
export interface Item {
_id: ObjectId;
sku?: string | null;
name: string;
updateDatetime: Date;
creationDatetime: Date;
}
С моей стороны, любой способ сделать это в основном одинаков, но то, что я всегда повышаю значения, не означает одно и то же. Для этого кода:
realm.write(() => {
realm.create<Item>('item', item, UpdateMode.Modified)
}
- Если артикул не определен (значение или поле не существует в элементе), значение не будет обновляться.
- Если артикул равен null, то значение будет равно null.
Итак, каким должен быть правильный способ объявления типа для обработки в моем приложении?
Ответ №1:
- Если артикул не определен (значение или поле не существует в элементе), значение не будет обновляться.
- Если артикул равен null, то значение будет равно 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