flutter - Dart 是否有相当于 TypeScript 的 --noImplicitAny,强制静态类型,除非明确禁用?
问题描述
我开始掌握 Flutter 和 Dart 语言,但偶尔会犯一些愚蠢的错误,因为语言允许我这样做。在type inference 的文档中,它说:
分析器可以推断字段、方法、局部变量和大多数通用类型参数的类型。当分析器没有足够的信息来推断特定类型时,它会使用该
dynamic
类型。
这似乎发生了相当多的事情,并且无法查看分析器是什么以及无法推断出什么。例如:
void doThings(List<int> integers) {
print(integers);
}
main() {
doThings([1, 2, 3].map((i) => i + 1));
}
IDE(IntelliJ)或编译期间没有警告,但在运行时我们会变得很丑TypeError: Instance of 'MappedListIterable<int, int>': type 'MappedListIterable<int, int>' is not a subtype of type 'List<int>'
,因为我需要一个.toList()
调用。
为了在编译时而不是运行时捕获类似的错误,TypeScript 有一个选项--noImplicitAny
可以将任何不可推断的类型变成错误,而不是默默地替换变体类型(dynamic
在 Dart 中,any
在 TypeScript 中)。
有没有办法让 Dart 编译器也有帮助?
解决方案
您可以自定义静态分析器。您需要添加analysis_options.yaml
到您的根目录。
要禁止隐式类型,请使用以下命令:
analyzer:
strong-mode:
implicit-casts: false
implicit-dynamic: false
推荐阅读
- node.js - 如何在firebase函数中将参数传递给cors
- html - 有谁知道如何用 CSS 绘制这些类型的箭头?
- google-apps-script - 复制整个电子表格,只保留值
- api - 我在尝试从具有 JWT 令牌的 API 发出 GET 请求时收到错误 401(未经授权)
- php - 使用 media_handle_upload 将 blob 文件上传到 wordpress
- graph-databases - Gremlin - 更新多条边的值
- python - 有没有办法加快这个循环?
- r - R中的Unnest取决于单元格的内容
- linux-kernel - Netfilter 钩子没有看到所有的数据包
- python - 如何创建数据集的系列表示