Day 4 基本型别 - part 1

今天要介绍 TypeScript 的基本型别,TypeScript 跟 JavaScript 一样拥有最基本的几种型别 Number、String、Boolean、Object、Array。那在 TypeScript 要怎麽使用呢?这边沿用 Day 1 的例子:

function add (n1: number, n2: number) {
  return n1 + n2
}

const number1 = "1"
const number2 = 1

const result = add(number1, number2)
console.log(result)

直接在要赋予型别的值後面加个冒号然後标记型别即可,string 以及 boolean 也是,这时如果像上面的程序码一样不小心把 number1 设成了字串时,编辑器就会提醒你:
https://ithelp.ithome.com.tw/upload/images/20210918/201319898BMxPLU5iQ.png

如果忽略编辑器的提醒执行编译的话,终端机也会提醒你:
https://ithelp.ithome.com.tw/upload/images/20210918/20131989sIboIALwSQ.png

总之就是各种提醒 XD,这样要出错的机率就很小了!

其实也能够用 JavaScript 来做验证呀!比如说这样:

function add(n1, n2) {
  if (typeof n1 === 'number' && typeof n2 === 'number') {
    return n1 + n2
  }
}

这样的话的确也可以,不过侦错的动作就会发生在 runtime 的时候,等於说必须得等编译完之後才能看到是否有错误,而 TypeScript 是在编译前就先侦测了。

Object 的写法也差不多,除了定义物件本身之外,还需要个别定义好里面每一个属性的型别:

const person: {
  name: string;
  age: number
} = {
  name: 'Claire',
  age: 27
}

但这样写很丑 XD,也可以用 type 注解来先把会用到的物件的全部型别都先一起定义好,最後要在物件上标记型别时直接标记定义好的 type 即可:

type Person = {
  name: string;
  age: number
}

const person: Person = {
  name: 'Claire',
  age: 27
}

如果要定义多个相同结构的物件时这样会比较乾净一些,这样的写法跟 interface 其实有点像,之後会再介绍到 interface 是什麽东东。

而 Array 的写法呢,则是这样:

let hobbies: string[]

这样就定义了一个规定里面都是字串的阵列,意思就是该阵列里面不能放数字,也不能放布林值,也不能放其他值,都不行!那如果今天真的很想放其他型别的值在阵列里怎麽办!!!那可以改个型别:

let hobbies: any[]

Any 型别可以让你放任何你想放的值,不过它太弹性了,这样其实就失去了使用 TypeScript 的原意了 QQ,所以这个型别请不要太常用,後面也会再介绍到 Any 型别。

以上是第四天的学习笔记~感谢阅读。:)


<<:  D05 / 为什麽不会填错资料? - Inline class, Scope  & DSL design in compose

>>:  Day 04 HTML/JavaScript Attribute vs Property

Day-20 使用 @apply 制做组件

昨天威尔猪示范了按钮的制作,很多小伙伴应该看完就崩溃了,样式设计很弹性没错,但写一个小小的按钮 +...

IT铁人DAY 20-Proxy 代理模式

  今天要介绍的模式是属於结构型模式的一种,此模式的名称我想大多数的人都听过或是知道它是做甚麽用的,...

[Day07] Flutter with GetX image picker 手机相簿选照片

Image picker flutter的照片操作,从相簿选照片或是拍照 之前用的时候版本是0.7....

[Day 19] 针对网页的单元测试(五)

再写登入的验证及功能 今天我们要来做登入的判断跟动作, 我们在HomeController.php引...

[Day 28] 实作 Multi-Channel Notifications

铁人赛已逐渐进入尾声,前面二十多天,我们一步步扩充加强 Ktor 功能,也整合了 ORM, Redi...