02 基础类型
2025/6/5大约 2 分钟
变量声明
TypeScript 继承了 JavaScript 的变量声明方式,但在作用域和行为上有着重要的区别。
var
// var 会提升变量的定义到作用域的顶部
function printA() {
var value1: number = 1
if (true) {
var value1: number = 2
console.log(value1) // 2
}
console.log(value1) // 2
}
var
声明的变量会发生变量提升,这意味着变量的声明会被提升到函数作用域的顶部,导致内部的value1覆盖了外部的value1。
let
// let 只影响当前作用域的变量
function printC() {
let value2: number = 1
if (true) {
let value2: number = 2
console.log(value2) // 2
}
console.log(value2) // 1
}
let
声明的变量具有块级作用域,内部的value2不会影响外部的value2。
const
const 声明的变量不能被修改
const b: number = 2
运行代码
实时编译:
tsc -w
node index.js
直接运行:
ts-node index.ts
数字类型
let num0: number = 111 // 普通数字
let num1: number = NaN // not a number
let num2: number = Infinity // 无穷大
let num3: number = 0b111 // 二进制 (7)
let num4: number = 0o77 // 八进制 (63)
let num5: number = 0xA56D // 十六进制 (42349)
运行结果:111 NaN Infinity 7 63 42349
字符串类型
let str0: string = 'chulan' // 普通字符串
let str1: string = `${num0}` // 模板字符串
运行结果:chulan 111
布尔类型
// 无需多言
let bool0: boolean = true
let bool1: boolean = false
空值类型
null 和 undefined
let null0: null = null
let undefined0: undefined = undefined
在严格模式下,null
和 undefined
是不同的类型,不能相互赋值。
void
let v1: void = undefined
// let v2: void = null // 严格模式下会报错
void
类型主要用于函数没有返回值的情况:
function sayHello(): void {
console.log("Hello, TypeScript!")
}
严格模式
我们可以通过 tsc --init
生成 tsconfig.json
,然后修改 strict
为 false
来关闭严格模式,此模式会影响类型检查的严格程度:
void
类型不能赋值为null
null
和undefined
不能相互赋值
小结
顾名思义,ts的核心在于类型,因此我们应该尽量避免any的滥用(工作的话能跑就行),但毕竟是自己学的,还是尽量写好点吧,下面是我查到的一些规范:
- 变量声明:优先使用
let
和const
,避免使用var
- 类型注解:明确指定变量类型,方便阅读
- 严格模式:建议开启严格模式,类似于老师督促你写出来好代码
本节代码详见此处。