4 ms·
> Dart 1.0 has optional typing, but Dart 2.0 will be statically typed (with type inference though). Not quite; it's more that compile time typing is getting cl
by rbehrends 9y ago
> Dart 1.0 has optional typing, but Dart 2.0 will be statically typed (with type inference though).
Not quite; it's more that compile time typing is getting cleaned up. You can still omit types, which will then either be inferred or set to `dynamic`. The following is valid strong mode Dart:
f(n) {
if (n <= 1)
return 1;
else
return n * f(n - 1);
}
The following will no longer work:
int x = "foo";
In short, you can still omit types. It's just that if you declare them, they are enforced [1]. Dart will also infer them if possible, i.e. the following is illegal:
var x = 1;
x = "foo";
Here, x is inferred to be `int`, which makes the assignment of a string illegal. However, the following works:
var x = true ? 0 : [];
x = "foo";
Here, the type of `x` cannot be inferred, so it becomes `dynamic`, and therefore the assignment of "foo" becomes valid.
You can turn this off with --no-implicit-dynamic; with this option, all types must either be declared or have to be inferable.
[1] Sometimes not at compile time, though: Dart allows implicit downcasts and covariant generics at compile time and will insert runtime checks to catch those situations.