npm –save 和–save-dev的区别
使用–save 安装的包是项目发布之后还需要依赖的包, 如axiox , express等包,等项目上线以后还需使用。
使用–save-dev 安装的包则是开发时依赖的包,等项目上线则不会使。
npm install 和 npm i 是一样
–save 和 -S 是一样
–save-dev 和 -D 是一样的
tsc
1 | npm i tsc -D |
任何 1.ts 生成 1.js
也可以修改 tsconfig.json 配置
1 | // "outFile":"./", |
类型
boolean
number
string
Explicit
Implicit
1 | let firstName: string = "Dylan"; |
unknown 比 any 安全
1 | let w: unknown = 1; |
date 性能
1 | Date.now() // 最快 |
via https://www.measurethat.net/Benchmarks/Show/9412/0/new-date-vs-new-dategettime-vs-datenow-100k
interface 和 type 区别
- 接口是通过继承的方式来扩展,类型别名是通过 & 来扩展。
- 接口可以自动合并,而类型别名不行
https://zhuanlan.zhihu.com/p/351213183
到底应该用 type 还是 interface ?
Because an interface more closely maps how JavaScript objects work by being open to extension, we recommend using an interface over a type alias when possible.
On the other hand, if you can’t express some shape with an interface and you need to use a union or tuple type, type aliases are usually the way to go.
意思是说能用 interface 的地方就用 interface,否则用 type,其实这个解释官方说的也比较明确,这样使用的原因是因为更贴合 JavaScript 对象的工作方式,再清晰一些,如果我们是定义一个 object,那么最好是使用 interface 去做类型声明,什么时候用 type 呢,当定义一个 function 的时候,用 type 会更好一些
1 | // the `?` operator here marks parameter `c` as optional |
1 | class Person { |
class Property ‘’ has no initializer and is not definitely assigned in the constructor
- tsconfig.json 关掉严格
1 | "compilerOptions": { |
- undefined
1 | employees : Employee[] | undefined; |
- definite assignment assertion
1 | employees!: Employee[]; |
- init
1 | employees: Employee[] = []; |
- Assignment in the Constructor
employees: Employee[];
constructor() {
this.employees=[];
}
super
父级构造函数
?? 对比 ||
使用 ?? 时,只有当值1为null或undefined时才返回值2;
使用 || 时,值1会转换为布尔值判断,为true返回值1,false 返回值2