类型“unknown”不能分配给类型“string”。
这要怎么处理??
// 如果你确定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()
}
}
2 回答22.1k 阅读✓ 已解决
1.2k 阅读
1 回答1.9k 阅读✓ 已解决
2 回答18.5k 阅读✓ 已解决
1 回答2.3k 阅读
document.title=to.meta.title as string
给后面断言一下就好了