教程:TypeScript TS 快速入門
【前端速成】TypeScript TS 快速入門|Tiktok工程師帶你入門前端|布魯斯前端
课程大纲
- 0:00 開始
- 8:33 開始課程
- 12:00 什麼是TypeScript
- 15:52 為什麼需要TypeScript
- 17:07 TypeScript優缺點比較
- 23:05 TypeScript編譯流程
- 24:38 React+TS課程宣傳
- 25:23 TypeScript環境安裝
- 28:58 ts檔案寫法、tsc編譯、tsconfig.json設定、sourceMap設定
- 39:32 TypeScript基本類型、陣列等等
- 47:46 TypeScript enum
- 51:43 TypeScript union
- 53:00 TypeScript type
- 55:18 TypeScript interface
- 56:20 TypeScript object寫法、type與interface的區別
- 1:01:59 TypeScript function
- 1:11:45 TypeScript 斷言as、unknown、fetch api
- 1:18:53 TypeScript class
- 1:39:22 TypeScript 泛型Generics
- 1:46:52 TypeScript utility
- 1:55:35 TypeScript + React 整合跟操作
- 2:17:17 Q&A
什么是Typescript
- 加强版的 js
- 加强了 type
- 开发完成后,需要编译
- 搭配 react/express 等框架
为什么需要
- 开发时的类型检测
- 补强动态语文的出错的缺点
- 提高可维护性
优缺点
- 优点:
- 减少bug
- 提高稳定性
- 很容易看懂 function
- 代码提示
- 缺点
安装
# 局部<推荐>
npm i -D typescript
# 全局
npm i -g typescript
# check
tsc --version
❯ tsc --version
Version 4.6.4
初始化配置文件
typescript --init
配置,编译
- srcDir: ./src
- outDir: ./dist
# 编译命令
tsc
Union
- js 同一个变量可以表示不同的类型
- ts 用这个方式(union)可以实现
let a = number | string;
a = 100;
a = 's1';
自定义类型
type A = number | string;
let a1: A;
a1 = 100;
a1 = 's1';
2者的区别
- type是不可以扩展的
- interface 是可以扩展的
interface Card {
name: string
}
interface Card {
age: number
}
let obj: Card = {
name: "aric",
age: 18
}
unknown 类型
- 是一个不确定的类型,但断言之后就确定了
- 提示编译器推断过程
type Data = {
userId: number
id: number
title: string
completed: boolean
}
type Beta = {
name: string;
}
async function getData() {
const res = await fetch('https://jsonplaceholder.typicode.com/todos/1')
return await res.json() as Data; // 断言
}
const data1 = getData();
// unknown 是一过渡,让ts编译器按如下流程推断
const beta = data1 as unknown as Beta;
never 类型
// 推断的返回值类型为never
function fail() {
return error("Something failed");
}
泛型
- function
- class
- 在使用的时候,告知程序类型
function print<T>(arg: T): void {
console.log(arg)
}
print("hello")
print(1)
# 可以用上面简单的方式,自动推断
print<string>("hello")
print<number>(1)
// ==== generic class ====
class Person<T> {
name: T
age: number
constructor(name: T, age: number) {
this.name = name
this.age = age
}
}
各种工具 utility
Partial<Type>
interface Todo {
title: string;
description: string;
}
function updateTodo(todo: Todo, fieldsToUpdate: Partial<Todo>) {
return { ...todo, ...fieldsToUpdate };
}
const todo1 = {
title: "organize desk",
description: "clear clutter",
};
const todo2 = updateTodo(todo1, {
description: "throw out trash",
});
Required<Type>
interface Props {
a?: number;
b?: string;
}
const obj: Props = { a: 5 };
const obj2: Required<Props> = { a: 5 };
Readonly<Type>
interface Todo {
title: string;
}
const todo: Readonly<Todo> = {
title: "Delete inactive users",
};
todo.title = "Hello";
参考