I know that types are pretty much optional with Dart, but if I choose to specify the variable type, I expect an assignment like
int i = "abc" to throw an error in runtime. However neither that nor any of the following throw an error, they just ignore the type cast.
String str = "test"; int integer = 5; double decimal = 1.5; List list = [1,2,3]; String s = decimal; print(s); // 1.5 int i = str; print(i); // test double d = list; print(d); // [1, 2, 3] List l = integer; print(l); // 5
In this tutorial I found, it says:
b = 9.8; // ERROR Can’t assign double to int
However, that code doesn’t generate an error for me either when using Dartium or when using
If I do
var i = "abc" + 1.5, it throws an error, so why doesn’t a type misassignment do the same? Is this an oversight or is it a design choice? If the latter, what’s the reasoning?
Thanks in advance.
This answer is Dart 1.x only
In Dart type annotations are just ignored when run in production mode (default). If you run in checked mode types are checked. If you call a non-existing method on an instance an exception is still thrown.
var i = "abc" + 1.5
+ operator (method) obviously does a type check on the argument and throws because it doesn’t non-string values.
For JS generated from Dart you can configure the
$dart2js transformer to produce "checked-mode" output by adding
transformers: - $dart2js: checked: true
pubspec.yaml file (for more
$dart2js options see Configuring the Built-in dart2js Transformer for Pub).
This only takes effect if you build using
pub build. If you use
dart2js directly to generate JS pass the
-c flag to create checked-mode output.
For code run on the server VM also pass the
-c flag like
dart -c your_script.dart
In your question you didn’t provide any information about how you run your Dart scripts or how you generate JS.
In this simple DartPad the editor shows errors from static analysis, which is another use-case for adding type annotations.
Answered By – Günter Zöchbauer
Answer Checked By – Timothy Miller (FlutterFixes Admin)