✍️ Tangxt | ⏳ 2020-08-10 | 🏷️ 101 |
大概从 2019 年开始,前端就可以不用 JS 了 -> 可以用 TypeScript 代替 JS,当然,JS 还是要学的……也许你会疑问不学 JS 直接学 TS 可以吗? -> 可以的,只是换了一门语言学习罢了,但是你学过 JS 后,再去学 TS,会好学很多……
.js
换成是 .ts
build
一下console.log
调试大法div
如何做?
<script src="./main.ts"></script>
结果报错了:
.ts
默认就是视频文件分片的后缀…… -> 所以 ts 文件默认就是视频文件
所以,如何让 TS 代码正常跑起来呢?
很简单,直接打包一下就好了:
npx parcel index.html
让 TS 代码能正常运行在浏览器 -> 需要准备很多工具 -> 而这些工具的准备,只需要
npx parcel index.html
一下就能全部自动帮你准备好了!
简单原理:
parcel 在打包的过程中,用到了「
"typescript": "^3.9.7"
」这个包!用了 parcel 后,你写 css 可以直接使用 sass、less…… -> 后缀是
.scss
……
用 TS 的好处:
px
,如div.style.top = e.clientY + 'px'
div.style.top += deltaY
时是咩有爆红的! -> 为啥说这是 JS 的一个 bug 呢?因为像 Python、Ruby 等,是无法做 '2'+1
这样的计算的 -> TS 为了兼容 JS 的 bug,所以就咩有作处理了!一些细节点(为啥要处理这个细节?):
div.style.top
有可能是'auto'
值!
tsconfig.json
-> 官网抄例子,搜索「tsconfig.json example」div.style.top!
-> 加个!
表示div.style.top
一定会有值(不会是个为空的值),如果没有值,那就搞个兜底值 div.style.top! || 0
-> 其实这个报错信息是有问题的,我们知道 div.style.top
一定不会为空值,但它爆红了,意味着是有 bug 的!如果不加 !
(想让整个 TS 代码看起来都是 JS 代码),那么你可以去掉这行 "strictNullChecks": true
配置!
"strict":true
是最严格,"strictNullChecks": true
是严格的空值判断!
整体代码:
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
#demo {
position: absolute;
top: 0;
left: 0;
}
var div = document.createElement('div')
div.style.border = '1px solid red'
div.style.height = '100px'
div.style.width = '100px'
div.id = 'demo'
document.body.appendChild(div)
var x = false
// 根据鼠标的相对位置来做偏移
var position = [0, 0]
div.onmousedown = (e) => {
x = true
// 拿到鼠标的位置(只看一屏视口)
position = [e.clientX, e.clientY]
}
// mousemove 信号是冒泡的 -> down 在 div 上 move 也会发信号给 document
document.onmousemove = (e) => {
if (x === true) {
// 如果此时鼠标按压在 div 上,在拖拽 div 的过程中,拿到相较于原位置偏移的的 X & Y
var deltaX = e.clientX - position[0]
var deltaY = e.clientY - position[1]
var top = parseInt(div.style.top!) || 0
var left = parseInt(div.style.left!) || 0
// 重置 div 的 top & left 值!
div.style.top = top + deltaY + 'px'
div.style.left = left + deltaX + 'px'
// 旧 -> 新 -> 旧 -> 新 -> 如此反复
position = [e.clientX, e.clientY]
}
}
document.onmouseup = (e) => {
x = false
}
老实说,用了 TS,代码提示贼 6,当然,如果你用 JS 的话,最好还是用 webstorm,而不是 VS Code……
var position = [0,0]
-> 根据 [0,0]
推测出 postion
是个 [number,number]
类型的position
的类型 -> var position: [numeber,number]
-> 这表示该数组只能有两个元素,而且必须是 number
类型的如果是 JS,变量随你赋值成什么类型的值!而 TS 则不行,一旦变量一开始就确定了类型,那么之后,你就不能改了! -> 注意 TS 代码在还未运行的时候,就能静态检测变量的赋值是否合理了!也就是说你在写代码的时候,就能提示你的代码是否写错了!
parcel 这个极简工具 的存在让我们极大地提高了对 TS 的学习效率,不然要去了解 webpack 的话,又得花费大量的时间去折腾 webpack 这个工具了……
第一次尝试:
npx parcel build
打包结果里边,main.ts & style.css
的文件路径是绝对路径:
我们想要的是:
https://xxx.github.io/ts-demo/dist/main.js
而结果却是:
https://xxx.github.io/main.js
方方在上传代码的时候,都会把多余的代码给删了,不然初学者会认为这多余的代码是有用的,而这就会增加初学者的学习负担!
第二次尝试(解决 bug):
查看 build
的帮助文档:
npx parcel help build
npx parcel build --public-url ./ index.html
打包结果就是:
如果你想在手机上用手指拖拽,那就用触屏事件,如
touchstart、touchend
,坐标是touchs[0]
之类的……
➹:🖥 CLI
console.log
调试大法
log
调试VSCode 技巧
项目目的
div.style.top!
与 div.style.top as string
-> 效果一样,用!
就是缩写!
怎么学 TS?
如果这节课所学的内容,都忘了? -> 学习新技术就是直接干,不要怂,遇到bug
打log
理论上,是的,TypeScript = JS + Type
泛型其实就是支持变量的类型
JS 基础打牢了,学习泛型 so easy!
把 TS 当作 JS 来写,爆红,就 CRM
主要区别就类型声明! -> 它还有其它特别有用的特性!
Angular 是 TS 的最佳搭档,但一般我们不用 Angular
也许以后会有 IS
……之类的
不会的,你现在看到的 TS 样子就是最终的 TS 样子 -> 也就是说,基本上可以不写类型!
同一个作者 -> 把 C#的精髓带入到了 TS -> 方方以前喜欢 C#,但因为没市场,工资不高,所以就转前端了,当方方学 TS 的时候,就感到 TS 代码非常的眼熟(既有 JS,又有 C#风格的代码)……
装个 prettier 插件,配置一下就好了!