Отключение статичной типизации с `dynamic`

dart

Тип dynamic — это статический тип, который игнорирует статическую типизацию. Он позволяет выполнять любые операции без проверок на этапе компиляции, но ошибки возможны в рантайме.

В том числе, компилятор будет не против присвоения null такой переменной, а значит использование dynamic выбивается из концепции sound null safety.

void main() {
  // answer может быть чем угодно
  dynamic answer = 42;
  answer = 'text';
  answer = null;
  // Также предполагается, что у него может оказаться любой метод
  answer.getAnswer();
}

Тип dynamic самый небезопасный из всех. Его применение должно быть обоснованным. На практике чаще всего c ним работают при парсинге JSON, так как сам JSON не типизирован.

Вместо dynamic, как универсальный тип для всего, лучше использовать Object или Object?, но только если такая универсальность действительно нужна. Ещё лучше использовать максимально узкие типы или дженерики.

dynamic это тип?

Как доказать, что dynamic это тип, а не ключевое слово? Проверить через is.

void main() {
  // Мы смогли присвоить dynamic в переменную с типом type 
  Type foo = dynamic;
}