Как объясняется в другом ответе, const
не предотвращает изменение объектов в ES6, оно только предотвращает переназначения.
Чтобы предотвратить глобальное переназначение параметров, можно использовать TSLint no-parameter-reassignment
rule .
Для предотвращения изменения объекта во время выполнения , Object.freeze
следует использовать. Это может быть применено во время компиляции с Readonly
сопоставленным типом . Однако это не будет иметь никакого эффекта, если типы совместимы:
interface compareTo {
(v1: Readonly<Square>, v2: Readonly<Square>): number;
}
const foo: compareTo = (a: Square, b: Square) => {
a.area = 0;
return 1;
}
Как правило, интерфейс не обязан сообщать, как функция должна работать внутри, он просто описывает ее интерфейс, поэтому он будет выглядеть так:
interface compareTo {
(v1: Square, v2: Square): number;
}
const foo: compareTo = (a: Readonly<Square>, b: Readonly<Square>) => {
a.area = 0; // error
return 1;
}
Но это будет работать, если типы выводятся из универсального типа, то есть a
тип не указан в compareTo
реализации:
interface compareTo<T = Readonly<Square>> {
(v1: T, v2: T): number;
}
const foo: compareTo = (a, b) => {
a.area = 0; // error
return 1;
}