Dart 动态泛型类型检查,类型未在以下范围内推断



我不明白为什么在下面的代码段中注释行没有推断状态为SubState<dynamic>

class Commander<T> {
final State<T> state;
Commander(this.state);
void doSomething() {
final state = this.state;
if (state is SubState) {
// print(state.property); // Does not work.
}
}

void doOther() {
final state = this.state;
if (state is SubState<T>) {
print(state.property); // This works.
}
}
}
abstract class State<T> {}
class SubState<T> extends State<T> {
T property;
SubState(this.property);
}

只能将变量提升为其声明类型的子类型。

局部state变量的(推断)声明类型为State<T>。 然后,您可以使用SubState进行is测试,也就是。SubState<dynamic>. 由于SubState<dynamic>不是State<T>的子类型,它不会促进。 执行is SubState<T>是检查并提升为子类型。

(正如@jamesdlin指出的那样,这是类型推断的一个已知缺点,如果原始SubState类型不会自动表示SubState<dynamic>,可能会更好。

最新更新