[JavaScript编码原则 | 青训营笔记]

68 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第5天。活动详情:# 伴学笔记创作活动来袭 | 第五届字节跳动青训营

TypeScript 是 JavaScript 的语法超集,它添加了静态类型,近几年的发展中,也受到诸多开发者的喜爱。Typescript 的社区逐渐壮大,日趋完善,为越来越多前端开发者提供服务。

TypeScript

为什么是TypeScript? 静态类型:可读性增强 可维护性增强

  • 编译是否发生在执行时 动态类型/静态类型
  • 不同类型在运算时是否能够自动转换 弱类型语言/强类型语言

基础数据类型:

const q:string='string';/*定义字符串*/
const w:number=1;/*定义数字*/
const e:boolean=true';/*定义布尔值*/
const r:null=null;/*null*/
const t:undefined=undefined;/*undefined*/

对象数据类型:

/*通常在类型前加I以区分其和对象*/
interface IBytendancer{
 readonly jobId:number;/*只读属性:不可在对象初始化外赋值*/
 name:string;
 sex:'man'|'woman'|'other';
 age:number;
 hobby?:string;/*可选属性:该属性可以不存在*/
 [key:string]:any;/*约束所有对象属性都必须是该类型的子属性*/
 /*类型补充 any:一种任意属性*/
}

函数类型:

/*定义一个函数类型并将其赋值给变量*/
interface IMult{
 (x:number,y:number):number;
}
const mult:IMult=(x,y)=>x*y;
/*  函数可进行重载
    timestamp为可缺省参数*/

数组类型:

type IArr1=number[];/*类型+方括号*/
type IArr2=Array<string|number|Record<string,number>>;/*泛型表示*/
type IArr3=[number,number,string,string];/*元组表示*/
/*接口表示*/
interface IArr4{
 [Key:number]:any;
}

泛型:

/*不预先指定数据的类型,而是在使用的时候进行指定*/
type IGetRepeatArrR=<T>(target:T)=>T[];
interface IX<T,U>{/*泛型接口 多泛型*/
 key:T;
 val:U;
}
class IMan<T>{/*泛型类*/
 instance:T;
}
type ITypeArr<T>=Array<T>/*泛型别名*/

其他知识点:泛型约束 泛型默认类型 类型断言

JS实践

代码实践1 - 交通灯

  • 将数据抽象成为状态列表
  • 使用递归的方式进行循环

代码实践2 - 洗牌

  • 判断一个数是否为2的幂:其二进制表示形式中是否只有一个1
  • 判断一个数是否为4的幂:在其为2的幂的基础上,是否表示形式中有偶数个0;
  • a&a-1:将a二进制转换后最低位的1除去
  • 转换为字符串 使用正则表达式进行筛选判断

代码实践3 - 分红包

  • 切西瓜法