Typescript
1. 【译】TypeScript的Record类型说明
简单来说,Record
类型就是为了处理含有不确定具体值,但是确定类型属性的对象的定义问题。比如以下:
interface IObject {
[name:string]:number
}
// 以下等效
const obj:IObject = {
'233':233
}
const obj2:Record<string,number> = {
233:233
}
// 同时可以组合多种,比如联合类型,较灵活
type roles = 'tester' | 'developer' | 'manager'
const staffCount: Record<roles, number> = {
tester: 10,
developer: 20,
manager: 1
}
2. 细数 TS 中那些奇怪的符号
文章里记录了一些常见的运算符,有的是ts才有的,有的是ecma规范的。列举一些常用的:
?? 空值合并运算符
在 TypeScript 3.7 版本中除了引入了前面介绍的可选链 ?. 之外,也引入了一个新的逻辑运算符 —— 空值合并运算符 ??。当左侧操作数为 null 或 undefined
时,其返回右侧的操作数,否则返回左侧的操作数。
与逻辑或 || 运算符不同,逻辑或会在左操作数为 false 值时返回右侧操作数。也就是说,如果你使用 || 来为某些变量设置默认的值时,你可能会遇到意料之外的行为。比如为 false 值(’’、NaN 或 0)时。
const foo = null ?? 'default string';
console.log(foo); // 输出:"default string"
const baz = 0 ?? 42;
console.log(baz); // 输出:0
const baz_fix = 0 || 42;
console.log(baz_fix); // 输出42
Gitlab
可以通过gitlab api执行一些操作,比如生成tag,commit,push等等,需要实例化的时候设置token,即为一个gitlab账号的token
sessionStorage
sessionStorage可以理解为一个key-value的存储,只在浏览器的当前标签页生效,关闭后直接清除。当前标签页上的同源协议请求共享sessionStorage,所以常常用于SPA页面进行存储和传递数据
缓存策略
同时 chrome存在后退缓存,即后退的情况下,会将直接读取css.js甚至ajax请求,从本地disk cache读取。
解决方案有:
- 加上 cache-control header
- ajax请求的url带上时间戳
NodeJs
nodejs真的是单线程吗?
简单来说就是异步以及I/O操作都交给libuv
浏览器线程和进程管理
iPhoneX适配
简单来说,就是webkit属性上多了能够获取安全距离的api,通过这个来进行适配,防止按钮无法点击
npm包开发
vue运行时v-for key的关系
如果使用 index 作为 v-for 的 key 会发生什么?
简单来说,如果以数组index作为key的话,实际上在增删操作上,对diff算法实际上性能提升有限,而且在v-for渲染子组件的情况下,vue的就地更新机制,会保留子组件内部的DOM和状态,导致显示异常