Flutter 是否存在使类型检查器执行类型缩小或条件断言的dart函数注释

Flutter 是否存在使类型检查器执行类型缩小或条件断言的dart函数注释,flutter,dart,Flutter,Dart,是否有一个结构可以向类型检查器传递函数的post条件 例如,在typescript中,可以说 函数断言成员(值:any):断言值为number{ 如果(值的类型!=='number'){ 抛出新的TypeError(); } } 我希望能够在dart中执行以下操作: class-SomeClass{ int?值; _检查前提条件(){ 如果(值==null){ 抛出MyPremissionError() } // ... } somefunc(){ _检查前提条件(); //这里我们知道'va

是否有一个结构可以向类型检查器传递函数的post条件

例如,在typescript中,可以说

函数断言成员(值:any):断言值为number{
如果(值的类型!=='number'){
抛出新的TypeError();
}
}
我希望能够在dart中执行以下操作:

class-SomeClass{
int?值;
_检查前提条件(){
如果(值==null){
抛出MyPremissionError()
}
// ...
}
somefunc(){
_检查前提条件();
//这里我们知道'value'是一个非空的int。
最终总和=值+5;
}
}

我知道我可以强制该值为非空
sum=value!+5
,但如果可能的话,我更愿意允许该功能通知类型检查器。

看起来Dart的类型系统没有那么强大。看起来(乍一看)唯一可能的事情是创建一个自定义代码分析器包(或搜索一个已经存在的包)。

Dart的类型系统似乎没有那么强大。看起来(乍一看)唯一可能的事情是创建一个自定义代码分析器包(或搜索一个已经存在的包)。

Dart注释实际上什么都不做。它们为诸如Dart分析器之类的工具提供提示(通常是为了使它能够生成额外的警告),但它们不能更改程序行为。即使您能够说服分析器将某些变量视为不同的类型,您仍然无法编译和运行代码


代码生成工具可以使用注释,因此一种可能是生成一条语句,例如
final value=this.value自动。然而,这将是一个很大的麻烦(这意味着代码需要使用
this.value=42;
进行赋值,并且会阻止您的代码被直接分析)。

Dart注释实际上什么都不做。它们为诸如Dart分析器之类的工具提供提示(通常是为了使它能够生成额外的警告),但它们不能更改程序行为。即使您能够说服分析器将某些变量视为不同的类型,您仍然无法编译和运行代码


代码生成工具可以使用注释,因此一种可能是生成一条语句,例如
final value=this.value自动。但是,这将是一个很大的麻烦(这意味着代码需要使用
this.value=42;
进行赋值,并且会阻止直接分析代码)。

您可以
断言(value!=null)虽然它只在调试模式下工作。请参见语言之旅。这是否满足了您的答案,还是您的需求更具体?@croxx5f。谢谢你的回复。据我所知,在上面的示例中,assert不允许像
\u checkPremissions()
这样的函数调用影响类型检查器。您可以在assert上调用函数,但它们不会提升值类型。即使调用像
\u checkpremissions
这样的函数也不会提升您的值。有一些有限的解决方法,比如使用builder模式,但根据您检查的属性数量,它可能很快失控。啊,太糟糕了。我希望打字检查更灵活。谢谢你的澄清。建设者是一个很好的论点。我不认为我更喜欢这个用例,但值得记住。@croxx5f。使用
以后仍然需要。您可以
断言(值!=null)虽然它只在调试模式下工作。请参见语言之旅。这是否满足了您的答案,还是您的需求更具体?@croxx5f。谢谢你的回复。据我所知,在上面的示例中,assert不允许像
\u checkPremissions()
这样的函数调用影响类型检查器。您可以在assert上调用函数,但它们不会提升值类型。即使调用像
\u checkpremissions
这样的函数也不会提升您的值。有一些有限的解决方法,比如使用builder模式,但根据您检查的属性数量,它可能很快失控。啊,太糟糕了。我希望打字检查更灵活。谢谢你的澄清。建设者是一个很好的论点。我不认为我更喜欢这个用例,但值得记住。@croxx5f。使用
以后仍然需要。