Я пытаюсь понять, как работает система типа Дарт. Вот фрагмент:
class Base {}
class Derived extends Base {}
void f(Derived x) {}
void main() {
Base x = Base();
f(x);
}
По крайней мере, на https://dartpad.dartlang.org/ это компилируется и выдает следующую ошибку времени выполнения:
Uncaught exception:
TypeError: Instance of 'Base': type 'Base' is not a subtype of type 'Derived'
Очевидно, что метод, принимающий упорядоченный набор, не можетпринять только общий набор.
Разве это не должно быть чем-то, что можно поймать во время компиляции? Существуют ли какие-либо флаги компиляции, чтобы компилятор мог обнаруживать такие ошибки?
UPD: вот еще более простой пример:
void main() {
num a = 2.5;
int b = a;
}