Явно назначьте любой тип в машинописном тексте

В настоящее время мы переводим нашу кодовую базу на машинописный текст, и у нас есть много мест с любым типом. Поэтому я пытаюсь применить явные переменные настройки как любые.

Вот пример фрагмента.

const a: string = 'h';
const b: any = 4;

const message = a || b; 
// Here I would like to get warning that I am assigning any to the message,
// so I would have to write const message: any = a || b;

function say(x: string) {
    console.log(x);
} 

say(message);

Мне известно о правиле tslint typedef (требуется вводить все переменные, а не только в любых случаях), а также no-unsafe-any (в этом случае не работает).

Есть ли способ потребовать явного определения любого типа, если вы пытаетесь его назначить?


person Gytis Vinclovas    schedule 07.08.2019    source источник
comment
Я считаю, что существует также правило no-any для tslint. Кроме этого, нет никакого способа получить предупреждение. Используйте вместо этого unknown и аннулируйте any любой ценой   -  person Titian Cernicova-Dragomir    schedule 07.08.2019
comment
Большое Вам спасибо. Неизвестно - это именно то, что было нужно. Я добавлю правило tslint no-any и игнорирую все текущие any, чтобы мы могли переписать их на unknown или набрать def со временем.   -  person Gytis Vinclovas    schedule 07.08.2019


Ответы (1)


В идеале вам следует избегать any. any по определению присваивается чему угодно и от чего угодно. Это подло быть небезопасным, а также имеет неприятную привычку распространяться.

Вы можете использовать более безопасный тип unknown. Это похоже на any в том, что вы можете назначить ему что угодно и предназначено для представления данных, для которых у вас нет четко определенного типа. Однако, в отличие от any, с ним ничего нельзя сделать без утверждения типа или защиты типа. См. any vs unknown

Кроме того, что позволяет tslint no-any остановить всех от использования any и позаботиться о предопределенных функциях, таких как JSON.parse, которые время от времени могут подкрасться any.

person Titian Cernicova-Dragomir    schedule 07.08.2019