在上文中,我们使用了TSC编译TS,接触到了第一个数据类型number
.
在TS中提供了 以下基本类型:
其中元组、枚举、任意any、void类型和 never类型是TypeScript特有的!
在上文中,我们知道在TS中,我们使用:类型
给变量添加类型注释。
let userName: string = "搞前端的半夏"
let age: number = 18
当我们定义一个变量时,并不指定类型,也不赋初始值。那么变量默认就是any类型。
let userName;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IJmRWlzI-1655361794711)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/567805c5c7f04658b275c2e99682f6d3~tplv-k3u1fbpfcp-zoom-in-crop-mark:1956:0:0:0.image)]
如果我们不指定类型,但是赋值,TS就会进行类型推断
let userName = "搞前端的半夏"
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ws4NA2Z2-1655361794712)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/a4ce02e57b164bbe97edc03277586855~tplv-k3u1fbpfcp-zoom-in-crop-mark:1956:0:0:0.image)]
any可以是任何东西,任何东西也可以是any。它是顶级类型。正因为any可以是任何东西,any会带来一些潜在的问题。我们要尽量定义具体的类型。
例如下面的例子,我们直接制定了userName的类型是any。
let userName:any = "搞前端的半夏"
当我们想使用userName去调用字符串的方法时,VSCode此时并没有提示我们有哪些方法!
但是你具体的指定类型时,VSCode就会提示我们!
let userName:string = "搞前端的半夏"
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xhol7aoX-1655361794712)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f6cdc4c6aab04d9ebf4ddec64f1293a4~tplv-k3u1fbpfcp-zoom-in-crop-mark:1956:0:0:0.image)]
例如下面的代码,,字符串并不存在这个方法!
let userName:any = "搞前端的半夏"
userName.noExitFunction()
即使我们使用,TS也不会报任何错。即使我们使用TSC编译,也不会报错,正常编译!
tsc --noEmit --watch
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yKgXoSml-1655361794713)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e699116e9478460280551db6540f9e02~tplv-k3u1fbpfcp-zoom-in-crop-mark:1956:0:0:0.image)]
虽然使用any会带来一些潜在的bug,但是某些情况下必须使用any!
例如TS中的异常捕获,catch的错误类型,必须是any和unknow,这是因为我们的catch是捕获的是的throw出来的异常,throw可以抛出任何类型的异常,也可以是具体的值,也可以是自定义的异常!