Appearance
Typescript
数据类型
数据类型分成两种:基本数据类型和对象类型。这两种又可以称为值类型和引用类型。
一般来说,我们常使用前一种描述方式,但是在涉及到需要深入数据存储的时候,常用后一种描述方式。
基本类型有:
- 字符串 string
- 数字 number
- 布尔 boolean
- 空 null
- 未定义 undefined
- Symbol
引用类型有:
- 对象 Object
- 数组 Array
- 函数 Function
- 正则 RegExp
- 日期 Date
值类型与引用类型的区别
数据都是以二进制形式存储在内存或硬盘中。值类型存储在栈内存中,可以由名称即寻到地址;引用类型的数据则分成两部分分别存储,数据存储在堆内存中,变量名称存在栈内存中。所以,通过变量名称寻到的是其在栈内存的寻址地址,真正的数据地址是通过寻址地址由系统去寻到的。
值类型的声明与使用
Typescript
let str:string;
str = "This is string";
let int01: number = 10;
let isOpen = false;
let nullVar = null;
let undefinedVar = undefined;
// Symbol 类型比较特殊,后面会单独说明
引用类型的声明与使用
Typescript
// 对象类型
let userInfo = {
name: "Tom",
age: 18,
}
// 数组类型
let numArr: number[];
numArr = [1,2,3];
// 函数类型
const addNum = (num1: number, num2: number) => {
return num1 + num2;
}
// 或
function multiNum(num1: number, num2: number){
return num1 * num2;
}
// 正则和日期的使用场景虽然也很多,但是相较于其它三种就显得比较少了,而且它们的声明与使用比较复杂,会单独进行讲解
新增类型——元组 tuple
元组与数组相似,都可以存储一组数据,不同点在于,数组的数据必须类型相同,而元组允许存在不同类型的数据。
Typescript
let tuple01 = [string,number,boolean];
tuple01 = [ "Tom", 16, false]; // 从左到右分别想表示名称、年龄、是否成年
别名配置及排错
在tsconfig.json中写入
json
{
"compilerOptions": {
"paths": {
"@/*": ["./src/*"]
}
}
}
这样可以设置艾特符为src的别名。
但在编译时会有找不到模块的问题。这个问题其实不在 ts-node,而是因为 tsc 在编译代码时不会去把路径别名替换成对应的相对路径,所以 ts-node 用 tsc 编译完然后转交给 node 执行的时候自然就找不到 @/ 这个目录了。
解决方法是安装依赖:
js
npm install tsconfig-paths
然后,运行的命令写成:
json
"dev": "ts-node -r tsconfig-paths/register --files ./index.ts"
如果使用nodemon监听,还可以安装另一个工具:
js
npm install ts-node-dev
运行命令则改写成:
json
"dev": "tsnd -r tsconfig-paths/register --respawn ./index.ts"
但是打包时这一套又会不管用,此时有两种方法可以解决。
方法一:使用cross-env对打包后的文件执行运行(需要安装cross-env依赖)
安装依赖
js
npm install cross-env
运行
json
"start": "cross-env TS_NODE_BASEURL=./dist node -r tsconfig-paths/register .\\dist\\index.js"
TS_NODE_BASEURL覆盖了tsconfig.json中的baseurl
方法二:打包时将别名替换
安装依赖
js
npm install tsc-alias
运行命令
json
"build": "tsc && tsc-alias"