TypeScript 常见错误整理
这里记录下了我在学习和使用 TypeScript 时遇到的常见错误, 如果你有什么疑问, 欢迎在下方留言或点击右上方小铅笔补充修改
这里记录下了我在学习和使用 TypeScript 时遇到的常见错误, 如果你有什么疑问, 欢迎在下方留言或点击右上方小铅笔补充修改
现手上有一个小型的 js 项目, 内容比较简单, 就是提供一个单页, 其中引用了 quill 富文本编辑器.
该页面需要嵌入到其他客户端(如 iframe 或 webview) 以提供统一的富文本编辑的用户体验.
项目内部使用 webpack 将 js / stylus 打包, 对外提供两个 html, 一个用于大屏的 iframe 显示, 另一个用于小屏的 Android / IOS 设备显示.
项目结构如下
你可以参考此项目对自己的项目进行改造, 过程大致相同
阅读本贴, 你可能需要了解以下前置内容
- typescript
- webpack
- yarn
本次改造所有改动可在 github 查看 commit 记录
“TypeScript 又是什么东西啊, 怎么又在出新语言, 求不要再出了, 学不动了!!”
开心的撸代码中, 突然接到老大消息: xxx离职了, 现在你来接手他维护的项目.😳
拿到代码后, 看到了这段东西
1 | /** 根据用户id获取用户信息 */ |
这个 id
是什么? 是 1
还是 "1"
还是 [1,2,3]
还是 "1,2,3"
???
这个 users
又是什么? 是普通权限用户? 还是管理员看到的用户?
全局搜索了一下调用该方法的地方, 发现这是个“万能”的方法, 传入 id 为 1
时会返回 1 号用户的不含私密信息的对象
传入 [1,2,3]
或 "1,2,3"
时会获取一个数组
如果上了ts
正则表达式可以从一段文本中提取特定内容的功能, 几乎所有编程语言都支持. 使用在爬虫、检查用户输入合法性、XSS 过滤等.
在整个学习过程中, 给大家推荐一个可视化正则表达式的网站 https://jex.im/regulex/
他可以根据你输入的正则表达式动态的生成匹配图, 帮助你理解一个复杂的正则表达式. 像下面这样
**更新(2023-07-07)**:现在推荐这个网站,它支持最新的具名分组和后行断言语法 https://wangwl.net/static/projects/visualRegex
javascript 中支持 3 种正则表达式语法: 字面量、构造函数和工厂符号, 他们的签名如下
/pattern/flags
new RegExp(pattern, [, flags])
RegExp(pattern, [, flags])
前段时间听说 Vue3.x 要使用 TypeScript 重构了, 本来一直都想研究一下 Vue 的源码, 这次带着夙愿来从头编写一个简单的、现代化的 Vue.
搭建好 TypeScript 开发环境后, 开始了一段 TypeScript 与 Vue 源码的探索之旅.
我使用 ES6 class
创建了一个 Vue 类, 为了实现数据监听, 我使用了 ES2015 中的 proxy
方法来对数据进行封装,
并且将这个 proxy
返回给类的构造方法, 以便于获取 vm
实例.
代码如下
1 | interface IOptions { |
如果你查看了在线版本, 可以看到, 我们在使用实例属性 vm.a
时报了一个 TS 错误 Property 'a' does not exist on type 'Vue'
,
意思是说 vm
实例上不存在属性 a
.
动态规划(DP, Dynamic Programming)
一句话总结:在求解一个复杂问题时,将其分解为若干个简单问题。通过求解简单问题的最优解,来找到目标问题的最优解。
常见问题
我们通过一个例子来了解一下DP的基本原理。
首先,我们要找到某个状态的最优解,然后在它的帮助下,找到下一个状态的最优解。
如硬币问题的例子
硬币问题:如果我们有面值为1元、3元和5元的硬币若干枚,如何用最少的硬币凑够11元?
因为最近在项目中经常需要将数组中的一个元素从数组中剔除,基于 ES6 的选择有比较多, 产生了一个关于几种方法之间执行效率的疑惑,网上也没有太多资料,于是乎本着学习性能测试的想法,展开了一段性能测试的旅程
benchmark
性能测试核心依赖mockjs
生成假数据lodash
提供另外的筛选数组的方法用于参照1 | yarn add benchmark mockjs lodash |
首先定义四种方法来测试数据删除操作,他们分别是 Array.prototype.filter
Array.prototype.splice
lodash.reject
lodash.filter
然后使用 mockjs
生成两个数组,长度分别是 100 和 1000,用四种方法分别对这两组数据进行测试。
需要注意的是,在测试时需要对测试数组进行深拷贝,避免他们之间相互影响(毕竟 Array.prototype.splice
会改变原数组)
然后我们对其中一组数据进行测试,来校验我们写的方法是否正确
最后运行 benchmark
,比较结果得出结论
testcafe (官网) 是一个基于 nodejs 的自动化测试框架,优点就先不多说了,我们直接进入正题!
testcafe 是一个 npm 包,它可以使用 npm 或 yarn 包管理器进行安装,这里我们使用 yarn 进行安装(因为它很快)
如果你的机器上没有安装 yarn,那么你可以使用 npm 来安装 yarn 😊
1 npm install -g yarn
在命令行中运行以下命令
1 | yarn global add testcafe |
这样, testcafe 就安装在你本机上啦
我们新建一个目录,用于练习我们的自动化测试框架 testcafe
1 | # 首先切换到你用于管理 web 项目的根目录,我本机是 "~/www" |
使用 Vue + Koa 打造全栈应用《时光·印象》图片分享应用 系列教程
之前在学校用前端 pjax 无刷新跳转 + 后端 php 服务端渲染做了一个应用, 用来做校内的图片分享网站, 后来离校后就没怎么管了, 所以只做了一点就弃坑了.
最近又想起来那个项目, 所以这次抱着学习的心态使用 vue + koa 来重新将这个项目拾起来, 一方面可以学习一些当下的新框架了解前段发展趋势, 另一方面也可以充实下自己的简历.
下面列出该项目的技术选型, 以及原因 (按重要程度排序)
单文件组件
响应式
以及 vue-router
vuex
axios
选 Vue 作为前端框架是因为他的单文件组件做模块化开发很方便, 还有现成的脚手架工具 vue-cli
, 以及对 @尤大 的 信仰
中间件
以及 koa-router
koa-jwt
选用 Koa 而非 Express 是因为 Express 了解过一些, 想换个口味试试. Express 也确实感受过回调地狱的痛, Koa 的洋葱模型似乎很不错!
后端只用来提供 API 接口不做 SSR.
SQL Database
常规的关系型数据库,深入学习一下 MySQL,为全栈发展打好坚实的基础
语法检查
防傻瓜
Eslint 进行代码风格检查和防傻瓜还是非常方便的, 尤其是配合其自带的 --fix
功能自动进行代码格式化. 避免在 coding 的过程中出现一些傻瓜式的语法错误带来的不必要的时间浪费.
使用 Eslint Standard 配置(Vue 使用 @vue/standard 配置)
语法糖
预处理
语法糖! 提高 coding 效率. 但是 Stylus, 一个小众的 css 预处理器, 提供了非常高效和酷炫的写法.
依赖安装
用 Yarn 就是因为快! 比 npm 快了不是一丁半点! yarn 执行项目内 bin 文件也非常方便, 免去了安装全局依赖的烦恼.