Type 'unknown' is not assignable to type 'string'.

寅春树
  • 699

image.png

类型“unknown”不能分配给类型“string”。

这要怎么处理??

回复
阅读 443
4 个回答

document.title=to.meta.title as string

给后面断言一下就好了

OK_a_MI
  • 284

条件判断,如果是 unknown 就不赋值,或者给个默认值。。
类型转换

// 如果你确定to.meta.title的类型是string,那就用类型断言
document.title = to.meta.title as string;
// 或者显式转换为string
document.title = String(to.meta.title);

如果类型是 unknown,说明这个类型具体是什么并不能推断出来,它存在不是 string 类型的可能,为了安全起见,它不能赋值给 string。any 是个类似的类型,但是 any 并不保证安全,因为它赋值给谁都可以。

要想忽略安全性快捷解决这个问题,可以 as string 或者 as any 将其转换为一个可以赋值给 string 的类型。但这样确实不安全,除非逻辑明确能保证其类型,否则不建议这样做。

安全的作法是判断它是个 string,再赋值。如果不是 string 给个默认值,比如

document.title = typeof(to.meta.title) === "string" ? to.meta.title : "";

也可以定义一个断言函数来用

function isString(value: unknown): value is string {
    return typeof value === "string";
}

document.title = isString(to.meta.title) ? to.meta.title : "";

当然在这里使用断言函数并没有什么优势,不过下面这种情况就可以看到断言函数的优势(可以自动推断分支内的类型)

function test(v: unknown) {
    if (isString(v)) {
        v.toLowerCase()
//      ^^ 被推断为 string 了,所以可以调用 toLowerCase()
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏