0%

ts 笔记

npm –save 和–save-dev的区别

使用–save 安装的包是项目发布之后还需要依赖的包, 如axiox , express等包,等项目上线以后还需使用。

使用–save-dev 安装的包则是开发时依赖的包,等项目上线则不会使。

npm install 和 npm i 是一样

–save 和 -S 是一样
–save-dev 和 -D 是一样的

tsc

1
2
3
4
npm i tsc -D
npx tsc --init

npx tsc -w

任何 1.ts 生成 1.js

也可以修改 tsconfig.json 配置

1
2
// "outFile":"./",
// "outDir": "./",

类型

  • boolean

  • number

  • string

  • Explicit

  • Implicit

1
let firstName: string = "Dylan";

unknown 比 any 安全

1
2
3
let w: unknown = 1;

let v: any = true;

date 性能

1
2
3
Date.now()  // 最快
new Date().getTime();
+new Date // 最慢

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
2
3
4
// the `?` operator here marks parameter `c` as optional
function add(a: number, b: number, c?: number) {
return a + b + (c || 0);
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Person {
private name: string;

public constructor(a: string) {
this.name = a;
}

public getName(): string {
return this.name;
}
}

const person = new Person('david');

console.log(person)

//console.log(person.name)

console.log(person.getName())

class Property ‘’ has no initializer and is not definitely assigned in the constructor

  1. tsconfig.json 关掉严格
1
2
3
"compilerOptions": {
"strictPropertyInitialization":false
}
  1. undefined
1
employees : Employee[] | undefined;
  1. definite assignment assertion
1
employees!: Employee[];
  1. init
1
employees: Employee[] = [];
  1. Assignment in the Constructor

employees: Employee[];

constructor() {
this.employees=[];
}

super

父级构造函数

?? 对比 ||

使用 ?? 时,只有当值1为null或undefined时才返回值2;

使用 || 时,值1会转换为布尔值判断,为true返回值1,false 返回值2