Я пытался найти способ сделать это правильно, но пока не нашел подходящего решения. Я знаю, что неизменные записи - это фабрики. Мой код выглядит так:
import { Record } from 'immutable'
interface ISessionDefaults {
id: number | null,
email: string,
}
interface ISession {
id: number,
email: string,
}
const defaults: ISessionDefaults = {
id: null,
email: '',
}
class Session extends Record(defaults) implements ISession {
}
Я получаю ошибку типа при определении класса:
[tsserver 2420] [E] Class 'Session' incorrectly implements interface 'ISession'.
Type 'Session' is missing the following properties from type 'ISession': id, email
Что понятно, поэтому я расширяю определение класса следующим образом:
class Session extends Record(defaults) implements ISession {
id: number
email: string
}
В этот момент я получаю еще одну ошибку типа: [tsserver 2564] [E] Property 'id' has no initializer and is not definitely assigned in the constructor.
ОК, так что время устанавливать значения по умолчанию. Я изменяю определение класса:
class Session extends Record(defaults) implements ISession {
id: number = 0
email: string = ''
}
Но это на самом деле не компилируется, так как я устанавливаю его напрямую. Ошибка: Error: Cannot set on an immutable record.
Полагаю, я могу определить метод constructor
, но это означает вызов super
после установки начальных значений, что также недопустимо.