Тип охранников обычно используются для различения профсоюзов. Есть еще несколько способов сделать это:
- Используйте оператор
switch
.
- Использовать перечисления.
switch
оператор
Этот метод прост, но может стать громоздким, если ваши союзы большие.
function someFunction(arg1: GeneralType) {
switch(arg1) {
case 'type1':
case 'type2':
return /* */
default:
/* ... */
}
}
someFunction('type1');
Перечисления
Недостатком здесь является то, что он не работает со строковыми перечислениями, а только с обычными.
enum SubTypeA {
type1,
type2,
}
enum SubTypeB {
type3,
type4,
}
type GeneralType = SubTypeA | SubTypeB;
function someFunction(arg1: GeneralType) {
if (arg1 in SubTypeA) {
/* ... */
}
}
someFunction(SubTypeA.Type1);
Как видите, для написания охраны типов требуется больше усилий, но защита типов не имеет ограничений, которые есть у других методов. Кроме того, они являются просто функциями, поэтому их можно использовать повторно. Вы сделали хороший выбор.