Я знаю, что машинопись машинописного текста имеет структурный механизм ввода. Я бы ожидать, однако, что если у вас есть класс вроде этого:Тип машинописного машиночитаемого текста не сталкивается с обычным классом типов, если структура такая же.
и один определенный как это:
class ReadonlyCountry {
readonly id: string;
readonly name: string;
}
, что система типирование бы показать коллизии, если возвращать объект с ReadonlyCountry
типом в функции, которая имеет тип возврата Country
. Похоже, это не так, как в примере typescript playground, показанном ниже.
class Country {
id: string;
name: string;
}
class ReadonlyCountry {
readonly id: string;
readonly name: string;
}
function select(value: string): ReadonlyCountry[] {
let country = new Country();
country.id = "1";
country.name = "name";
return [country];
}
function select2(value: string): Country[] {
// the type of the return here will be ReadonlyCountry[]
// the type of the function return here is Country[]
// why doesn't this collide?
return select(value);
}
Так что мой вопрос, как я могу убедиться, что тип, который имеет только для чтения свойства и тип, который не имеет только для чтения типов, и которые являются структурно одни и те же, ошибки шоу типа при смешивании? Я пропустил что-то глупое здесь, и это просто структурная типизация, которая вызывает это?
Любая помощь будет оценена по достоинству.
Я знаю о отображаемом Readonly типе и намерен использовать его. Это, однако, является проблемой для меня. Я использую Redux и хочу, чтобы состояние поступало из моего магазина только для чтения. Это означает, что объект, который выглядит одинаково без реальных свойств (те, которые входят в мой магазин), и вариант с реанимией (тот, который выходит из моего магазина). Я боюсь, что это будет невозможно ... – KwintenP
Я думаю, вам стоит пойти с Readonly, и если хотите - убедитесь, что вы читаете только во время выполнения, также заморозив их сразу же после их получения из магазина (http: //www.2ality .com/2013/08/защита-objects.html). – Amid
Readonly исправляет мою проблему, если я определяю ее везде. Но если кто-то забывает его правильно определить, я бы хотел, чтобы машинописный шрифт подбирал его. Если он этого не сделает (как и в моем примере), я уверен, что разработчики будут где-то там. Я уже использую некоторую замораживающую библиотеку, чтобы иметь проверки времени выполнения, но я хотел бы иметь ее во время компиляции. – KwintenP