Typescript 中的 unknown 是什么
对于 unknown
类型,我们必须首先检查当前存储在变量中的类型,然后才能获得 typescript 支持。
当使用 any
类型时——typescript 会忽略我们所做的任何事情,任何事情都是允许的,但这不是我们大多数时候想要的,大多数时候我们仍然希望进行一些类型检查。
那是 unknown
出现的时候——我们告诉 typescript,嘿,我们会得到这个值,但是我们不知道它的类型,所以我们只需要检查几个 if 语句来追踪它并安全地使用它 ,在 if 块中为我们提供了对检查的特定类型的支持。
例如,在下面的代码片段中,我们得到一个错误:
let myString: string;
let remoteData: unknown;
remoteData = 'hello world';
myString = remoteData;
错误的原因是 myString 必须是字符串,并且 remoteData 的类型未知,因此分配失败。 一个重要的区别是,如果我们对 remoteData 的类型使用 any
而不是 unknown
,我们就不会得到错误,因为当我们使用任何 typescript 时,不会为我们提供类型检查。
修复错误的方法是有条件地检查 typeof remoteData
是否为字符串,然后才继续分配:
let myString: string;
let remoteData: unknown;
remoteData = 'hello world';
if (typeof remoteData === 'string') {
myString = remoteData;
}
在 if 块的范围内 remoteData 保证是一个字符串,因此我们可以访问它上面的所有字符串方法,例如 toLowerCase。
在 if 块之外,类型仍然未知。
因此,在使用 unknown
类型时,我们必须在进行分配和调用特定于类型的方法之前进行条件检查,与 any
类型相比,它仍然提供了大量的功能和类型检查。
当我们不知道我们将获得什么类型的值时,unknown
是比任何类型更好的类型,但我们知道我们想用它做什么。 在这些情况下,我们可以使用 unknown
类型在条件块中获得类型支持。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站。本站所有源码与软件均为原作者提供,仅供学习和研究使用。如您对本站的相关版权有任何异议,或者认为侵犯了您的合法权益,请及时通知我们处理。