带注释的可空类型的条件值声明将引发“类型推断失败”

诺亚

我想有条件地声明一个@Composable (() -> Unit)?像这样的类型的值

val myComposable: @Composable (() -> Unit)? = { /* something */ }.takeIf { condition }

原因是因为我想将ComposeListItemsecondaryText参数一起使用

// Jetpack compose component
@Composable
fun ListItem(
  secondaryText: @Composable (() -> Unit)? = null,
  // ...
)
// My Usage
ListItem(
  secondaryText = { /* something */ }.takeIf { condition == true }
)

但事实证明,这样做会引发以下错误:

Type inference failed. Expected type mismatch: inferred type is (() -> Unit)? but @Composable() (() -> Unit)? was expected

后来我意识到这段代码可以编译:

val secondaryText: @Composable (() -> Unit)? = if (condition) {
  null
} else {
  { /* something */ }
}

这两个声明之间有什么区别?为什么前者会导致类型推断失败?

加坦

完成后{ /* something */ },您将创建一个类型为的值() -> Unit添加.takeIf { condition }会将类型更改为(() -> Unit)?没有信息,这是一个@Composable

这就是第二种方法起作用的原因:您已经指定要创建一个@Composable

您可以通过明确声明您正在使用来解决此问题@Composable

ListItem(
    secondaryText = (@Composable { /* something */ }).takeIf { condition }
)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

条件运算符?:具有可空类型转换

来自分类Dev

使用匿名类型时,对“ Join”的调用中的类型推断失败

来自分类Dev

函数声明中的VBA可空类型

来自分类Dev

Scala类型推断失败?

来自分类Dev

Scala类型参数推断失败

来自分类Dev

是否可以声明将自身用作C ++参数的函数类型?

来自分类Dev

神秘类型声明失败?

来自分类Dev

调用Iterator :: collect时,“需要类型注释” /“无法推断类型”

来自分类Dev

可空类型和.HasValue仍会引发Null异常

来自分类Dev

使用“?”的参数和类型声明 用于可空值

来自分类Dev

Kotlin:类型推断失败。预期的类型不匹配:推断的类型为MutableList <Long?>,但预期的是MutableCollection <Long>

来自分类Dev

TypeScript:推断带注释对象内部类型的泛型

来自分类Dev

TypeScript问题推断受限条件键类型的值类型

来自分类Dev

带返回值的泛型函数参数的TypeScript参数类型推断?

来自分类Dev

类型注释被推断的表达式类型覆盖

来自分类Dev

类型推断失败。预期类型不匹配

来自分类Dev

简单的Java类型推断失败

来自分类Dev

获取带注释的对象类型的keyof

来自分类Dev

PHP可为空的类型声明

来自分类Dev

类型推断导致空引用

来自分类Dev

Scala类型参数推断失败

来自分类Dev

调用“加入”时类型推断失败

来自分类Dev

Swift数组声明/类型注释

来自分类Dev

条件类型声明

来自分类Dev

推断声明的类型

来自分类Dev

Kotlin 类型推断失败

来自分类Dev

带联合的条件类型

来自分类Dev

条件类型未正确推断

来自分类Dev

转换为值类型 System.Boolean 失败,因为具体化值为 null,结果类型的泛型参数必须使用可空类型

Related 相关文章

热门标签

归档