Extension types в Dart временами может ввести в заблуждение. Следующий код будет валидным и рабочим, но с точки зрения семантики практически бессмысленным, ведь extension types существуют только на уровне типов (compile-time):

`extension type TExt(int i) { int increment() => i + 1; }

void main() { final dynamic a = 1; final dynamic b = "string";

switch (a) { case TExt(): print(a.increment()); //2 default: print(b.runtimeType); }

switch (b) { case TExt(): print(b.increment()); default: print(b.runtimeType); //String } } На самом деле подвох кроется в том, что когда идет проверка типа extension type, то для нее используется подлежащий тип (в нашем случае int), а не сам тип расширения. Под капотом мы получаем проверку x is int.

Теперь вопрос. Это я тупой и только для меня эта особенность была не очевидна или это действительно может поставить в тупик?

P.S. С другой стороны, такое "виртуальное оборачивание" в зоне действия case, если мы делаем это ОСОЗНАННО, может помочь немного сократить код (не выполняем явных приведений типов).`