type unknown,比较一下TypeScript中的unknown和any,说说unknown和any的区别

  type unknown,

  本文带你比较一下TypeScript中的unknown和any,说说unknown和any的区别。希望对你有帮助!

  我们知道任何类型的变量都可以赋给任何值。

  设myVar:any=0;

  myVar= 1

  myVar=falseTypeScript指南并不鼓励使用any,因为使用它会丢掉类型限制——而对类型限制的需求是我们选择TypeScript的原因之一,所以恰恰背道而驰。

  TypeScript(3.0及以上版本)还提供了与any相似的特殊类型unknown。我们也可以将任何值赋给未知的类型变量:

  设myVar:unknown=0;

  myVar= 1

  myVar=false现在有一个问题。任何和未知有什么区别?

  

1. unknown vs any

  为了更好地理解unknown和any之间的区别,让我们从编写一个想要调用其唯一参数的函数开始。

  我们将invokeAnything()的唯一参数设置为任意类型。

  函数invokeAnything(callback: any) {

  回调();

  }

  invokeAnything(1);//抛出“type error:callback not a function”因为回调参数是任意类型,所以callback()语句不会触发类型错误。我们可以用any类型的变量做任何事情。

  但是运行会抛出运行时错误:typeerror: callback不是函数。1是一个数字,不能作为函数调用。TypeScript不保护代码免受此错误的影响。

  这不仅允许invokeAnything()函数接受任何类型的参数,而且还强制对参数进行类型检查以防止上述错误。我们做什么呢

  有请 unknown 大哥来控场。

  和any一样,未知变量接受任何值。但是,当您尝试使用未知变量时,TypeScript会强制进行类型检查。这就是我们想要的。

  函数invokeAnything(回调:未知){

  回调();

  //对象属于“未知”类型

  }

  invokeAnything(1);因为回调参数的类型未知,所以callback()语句有一个类型错误:对象属于“未知”类型。与任何情况相反,TypeScript保护我们不调用可能不是函数的东西。

  在使用未知类型的变量之前,需要检查其类型。在这个例子中,我们只需要检查callback是否是一个函数类型。

  函数invokeAnything(回调:未知){

  if(回调类型===函数){

  回调();

  }

  }

  invokeAnything(1);

2. unknown 和 any 的心智模式

  说实话,我学习的时候很难理解未知。它与any有何不同,因为两种类型都接受任何值?

  以下是帮助我理解两者区别的规则:

  您可以将任何内容赋给未知类型,但是在类型检查或类型断言之前,您不能对未知类型进行操作。您可以将任何内容分配给any类型,也可以对any类型进行操作。上面的例子只是说明了unknown和` any 之间的异同。

  未知示例:

  函数invokeAnything(回调:未知){

  //任何东西都可以赋给未知类型,

  //但是在类型检查或类型断言之前不能操作unknown。

  if(回调类型===函数){

  回调();

  }

  }

  invokeAnything(1);//您可以将任何内容赋给“unknown”类型检查回调的类型===function ,并检查回调是否为函数。如果有,可以调用。

  任何例子:

  函数invokeAnything(callback: any) {

  //您可以对“any”类型执行任何操作

  回调();

  }

  invokeAnything(1);//您可以将任何内容分配给“any”类型。如果回调是any,TypeScript不会强制callback()语句进行任何类型检查。

  

3.总结

   unknown和any是两种可以保存任何值的特殊类型。

  建议使用unknown而不是any,因为它提供了一个更安全的类型——如果要对unknown进行操作,必须使用类型断言,或者将其缩小到特定类型。

  有关编程的更多信息,请访问:编程视频!这就是TypeScript中unknown和any的区别的细节。更多请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: