[ts]Typescript学习记录坑点合集

目录

一、tsconfig.json

二、tsc --watch监听同步变化问题

2.1 空类无法生成对应的js文件​编辑

2.2 删除ts文件不会同步删除js文件

2.3 修改ts文件名问题

2.4 修改ts文件的文件夹名称问题

三、import自动导入类路径异常问题

3.1  同名ts类问题 

四、剩余参数问题 ( ...params:any )

五、JSON jsonObj转string问题

六、declare修饰符

七、if(xxx)和if(xxx!=null)区别

八、参数默认值和可空参数区别

九、数组[[0]]的坑爹用法


环境

IDE: Visual Studio Code 1.69.1 

npm 8.1.2

node 16.13.2

tsc 4.7.4


初学者补充说明:

tsc -init 生成tsconfig.json 

tsc /fileA/xxx.ts 生成xxx.js文件到outDir指定目录下fileA/xxx.js

node /outDir目录/fileA/xxx.js 执行xxx.js文件

可同时使用多条命令:

tsc /fileA/xxx.ts; node /fileA/xxx.js

多条命令之间用分号';' 进行分割

一、tsconfig.json

 "strict": true     启用所有严格的类型检查选项。

若不需要启用严格检查则为false。

"outDir": "./js"//你要生成js的目录

ctrl + ` 启动终端:执行tsc --watch 开启监听ts改动同步js变化

ctrl + shift + ` 开启一个新的终端

二、tsc --watch监听同步变化问题

2.1 空类无法生成对应的js文件

2.2 删除ts文件不会同步删除js文件

2.3 修改ts文件名问题

修改ts文件名后vscode会同步打开所有import了这个ts类的文件,让你手动去保存,才能同步到所有对应的js文件的import改动。

未修改前叫 FoodApple.ts

 修改后脚 foodapple.js 会打开main.ts文件(它引用了FoodApple.ts)让你手动保存,所有文件都要你手动保存一遍才能同步js,如果你这时候直接关闭vscode,并不会同步,js的代码会和你ts代码的有不同地方,除非你再去修改对应的ts保存才会同步生效。

 注意import对应的是文件名foodapple.ts(不是里面的类名FoodApple不会有影响)

同时修改文件名会新增一个js(即新文件名.js) 同时旧js文件不会同步删除 需要你手动删除。

2.4 修改ts文件的文件夹名称问题

修改一个文件夹名后,涉及到该文件夹名的所有import的文件都会被vscode打开,让你手动保存,一个个保存后才会同步js,并且js目录下的文件夹名称不会同步修改,需要你手动修改JS文件夹名。如下未修改前和修改后

三、import自动导入类路径异常问题

3.1  同名ts类问题 

如果发现自动导入没有正常进行,或者导入了但是使用这个类一直存在异常报错,那一定是存在同名ts类。(编译是通过的)

四、剩余参数问题 ( ...params:any )

猜猜输出什么?

.

.

.

.

 是的!funcA获取到的是一个any[],一共4个分别是1, "a", true, 3.14。
funcBBB获取到的是一个any[],但是,调用者funcA处只传递了一个参数即([1, "a", true, 3.14])any数组。所以输出的是1,a,true,3.14。因为它就是个数组(元组?)

 

若你想funcBBB获取到也是和funcA一样的情况,只需把funcBBB(...params:any)改成funcBBB(params:any)即可。

总结: ...是剩余参数的关键字,被这个剩余参数关键字标记的参数,并不是什么特殊的类似C#的那种,仅仅可直接理解为...params:any 等同于 any数组,但是它比直接定义any[]好处是能够让调用者传递任意多个any进去再封装成数组,并且默认是可为空的 也就是你可不传任何参数。然后,当你想继续传递这个...标记的参数params时,切记!切记!传递进去的方法这个参数不要再用...剩余参数关键字去定义了,不然的话就相当于你把params数组传递给了一个新的数组,那么你传递进去的方法体里只能用参数[0]去获取到传进来的数组。
有些地方不理解...的使用方法,可能会有人定义成:   ...params:any[],但是传给它的却不是any[],只是单个变量,其实这是有问题的,按照我的理解是有问题的,按道理是会报错的,如果使用者把params[0]当做了数组去使用的话,但实际拿到的却是一个单个变量 比如int。肯定就报错了嘛。

ts + js + vscode + git 简直能坑出天际~

五、JSON jsonObj转string问题

Map<key,value>无法成功转string必须将其通过改写为{  [key]=value } 形式才能成功转string
例如:

let json : any = {};
for(let key of map.keys()){
     json[key] = map.get(key);   
}
JSON.stringify(json, null, 1);  输出完整的字典json字符串(后面2个参数是为了显示缩进后的json)

六、declare修饰符

重定义类成员(相当于重写类成员)重写方法用override(也可以不用)

七、if(xxx)和if(xxx!=null)区别

0、false、"" 这三个数据无法通过if(xxx)条件,可通过if(xxx!=null)条件,所以判空一定要写if(xxx!=null)

八、参数默认值和可空参数区别

正常参数默认值使用 

 

不正常使用

猜猜输出是什么?BFunc执行AFunc时传入的是2个null值,AFunc是否会转化为默认值?因为我传空了嘛,它会不会帮我填上默认值?哎别猜了,不会!直接输出null

 怎么办?用可空参数解决!

 

是的!可空参数 和 参数默认值为null 是不一样的概念!虽然都理解为是空,但ts执行时还是有这个坑爹的区别,可以说尽量别写默认值null的参数默认值,只要你参数默认值是null,你就乖乖地写可空参数 形式 param?: type

九、数组[[0]]的坑爹用法

let data = [[0]];
外部可直接用data[0]取出来进行运算,但是但是!这取出来的是一个string,因为我用它进行+一个number时会拼接字符,而不是做加法运算,一定要用data[0][0]进行获取(不要偷懒)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值