Typescript имеет довольно классное сообщение об ошибке при проверке разных типов:
let strange_boolean = true;
let strange_string: string = "1";
console.log(strange_boolean == strange_string);
error: TS2367 [ERROR]: This condition will always return 'false' since the types 'boolean' and 'string' have no overlap.
console.log(strange_boolean == strange_string);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Для но этот код компилируется:
let strange_boolean: any = true;
let strange_string: string = "1";
console.log(strange_boolean == strange_string);
Потому что any
можно преобразовать в anything
...
Но что, если я хочу каким-то образом отключить даже неявное преобразование из any
во что угодно? Есть ли у Typescript
какой-либо флаг для этого? Я хочу, чтобы этот код компилировался только в этом случае:
let strange_boolean: any = true;
let strange_string: string = "1";
console.log(String(strange_boolean) == strange_string);
or
let strange_boolean: any = true;
let strange_string: string = "1";
console.log(Boolean(strange_boolean) == Boolean(strange_string));
unknown
? - person Joachim Sauer   schedule 22.06.2020==
является эталонным сравнением, я не думаю, что есть простой способ добиться того, чего вы хотите, ноunknown
похож наany
за исключением того, чтоany
может быть чем угодно, поэтому вы можете делать с ним все, что угодно,unknown
это может быть что угодно. поэтому вам нужно проверить, что это такое, прежде чем что-либо делать с ним. - person Joachim Sauer   schedule 22.06.2020==
это сравнение ссылок только в том случае, если это один и тот же объект, но что, если это другой объект? Я хочу во время компиляции предотвратить такое сравнение с ошибкой comile - person Denis Kotov   schedule 22.06.2020no-explicit-any
. Это отвечает на ваш вопрос? - person jcalz   schedule 23.06.2020