node环境执行ts文件

1
2
npm install @types/node --save-dev (node环境支持的依赖必装)
npm install ts-node -g
  • 什么是 @types/node
    @types/nodeTypeScript 的一个声明文件包,用于描述 Node.js 核心模块和常用的第三方库的类型信息。这些声明文件增加了对 TypeScriptNode.js 环境下的支持,并提供了更好的类型安全和编辑器智能提醒。

  • 什么是 ts-node
    ts-node是基于tsc编译器的一款运行时 TypeScript 编译器,它允许 TypeScript 代码在运行时通过Node.js环境直接执行。这意味着,无需先构建应用程序,因此可以快速进行开发和测试,大大提高了开发效率。
    与tsc不同,ts-node可以立即编译 TypeScript 代码并直接在Node.js环境中运行,而无需经过构建或打包等步骤。这个特性使得我们在开发过程中,可以更加灵活方便的使用 TypeScript 进行快速迭代。

Any类型

Any 类型表示一个可以接受任何类型的变量,当一个变量的类型标记为 any 类型时,它可以被赋值为任何类型的值,声明变量时没有指定任意类型默认为 any 类型

1
2
3
4
5
6
7
let name: any = 'antVae'
name = true
name = 18

let name // 没声明类型默认为any类型
name = 'antVae'
name = 18

弊端: 如果使用 any 就失去了TS类型检测的作用,不要让 TypeScript 变成 AnyScript

unknown类型

TypeScript3.0中引入了 unknown 类型,与 any 类型一样,所有类型都可以分配给 unknown,但它更安全,unknown 类型比 any 类型更加严格

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
let value: unknown
value = true // ok
value = 18 // ok
value = 'antVae' // ok
value = [] // ok
value = {} // ok
value = null // ok
value = undefined // ok
value = Symbol('val') // ok

// 这样写会报错,unknown 类型不能作为子类型只能作为父类型,any 类型可以作为子类型也可以作为父类型
// unknown 类型不能赋值给其他类型,但可以赋值给 any 类型
let value: unknown = 'antVae'
let value2: string = value

// 这样写就没问题
let value: any = 'antVae'
let value2: string = value

// unknown类型可赋值对象只有 unknown 和 any
let value: unknown = 'antVae'
let value2: unknown = value
let value3: any = value

any 和 unknown 区别

对象被定义为any类型时,不管访问的属性存不存在,都不会报错,但定义为unknown类型时,是不能调用对象的属性和方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
let obj: any = {
name: 'antVae',
hobby: (): string => {
return '爬山'
}
}
// 不会报错
console.log(obj.name)
console.log(obj.hobby())
console.log(obj.sex)

let obj: unknown = {
name: 'antVae',
hobby: (): string => {
return '爬山'
}
}
// 会报错
console.log(obj.name)
console.log(obj.hobby())
console.log(obj.sex)