wix建設(shè)網(wǎng)站鏈接交換平臺(tái)
文章目錄
- 編譯環(huán)境
- 基本類型
- 函數(shù)類型
- 函數(shù)重載
- 聯(lián)合類型和函數(shù)重載
編譯環(huán)境
TypeScript最終會(huì)被編譯成JavaScript來運(yùn)行,所以我們需要搭建對(duì)應(yīng)的環(huán)境。
首先我們要全局安裝typescript
# 安裝命令
npm install typescript -g
# 查看版本
tsc --version
?? 方式一:通過webpack,配置本地的TypeScript編譯環(huán)境和開啟一個(gè)本地服務(wù),可以直接運(yùn)行在瀏覽器上
- 安裝webpack相關(guān)的依賴
使用webpack開發(fā)和打開,需要依賴webpack、webpack-cli、webpack-dev-server
npm install webpack webpack-cli webpack-dev-server -D
- 在package.json中添加啟動(dòng)命令
為了方便啟動(dòng)webpack,我們?cè)趐ackage.json中添加如下啟動(dòng)命令
"scripts": {"test": "echo \"Error: no test specified\" && exit 1","serve": "cross-env NODE_ENV=development webpack-dev-server --mode=development --config build/webpack.config.js"
},
- 添加webpack的其他相關(guān)依賴
依賴一:cross-env
這里我們用到一個(gè)插件 “cross-env” ,這個(gè)插件的作用是可以在webpack.config.js
中通過 process.env.NODE_ENV
來獲取當(dāng)前是開發(fā)還是生產(chǎn)環(huán)境,我們需要這個(gè)插件:
npm install cross-env -D
依賴二:ts-loader
因?yàn)槲覀冃枰馕?ts文件,所以需要依賴對(duì)應(yīng)的loader:ts-loader
npm install ts-loader -D
依賴三:html-webpack-plugin
編譯后的代碼需要對(duì)應(yīng)的html模塊作為它的運(yùn)行環(huán)境,所以我們需要使用html-webpack-plugin來將它插入到對(duì)應(yīng)的模板中:
npm install html-webpack-plugin -D
- 配置webpack.config.js文件
const HtmlWebpackPlugin = require("html-webpack-plugin");module.exports = {entry: "./src/main.ts",output: {filename: "build.js",},resolve: {extensions: [".tsx", ".ts", ".js"],},module: {rules: [{test: /\.tsx?$/,use: "ts-loader",exclude: /node_modules/,},],},devtool: process.env.NODE_ENV === "production" ? false : "inline-source-map",devServer: {static: "./dist",// stats: "errors-only",compress: false,host: "localhost",port: 8080,},plugins: [new HtmlWebpackPlugin({template: "./index.html",}),],
};
下面我們就可以愉快的在main.ts中編寫代碼,之后只需要啟動(dòng)服務(wù)即可:
在終端中啟動(dòng)服務(wù):npm run serve
方式一: 參考文章:
TypeScript(二)使用Webpack搭建環(huán)境
?? 方式二:通過ts-node庫,為TypeScript的運(yùn)行提供執(zhí)行環(huán)境
- 安裝ts-node
npm install ts-node -g
- 另外
ts-node
需要依賴tslib
和@types/node
兩個(gè)包:
npm install tslib @types/node -g
- 現(xiàn)在,我們可以直接通過
ts-node
來運(yùn)行TypeScript
的代碼
ts-node math.ts
基本類型
// number類型
let num: number = 100;
// string類型
let msg: string = "abc"; // 一般這種可以不寫類型注解
// boolean類型
let flag: boolean = true;
// null undefined
let n: null = null;
let u: undefined = undefined;// Array類型
let arr1: string[] = ["abc", "123"];
let arr2: Array<string> = ["aaaa", "ccc"];// Object類型
let obj: {name: string;age: number;
} = {name: "zhangsan",age: 18,
};
console.log(obj.age);// Symbol類型
const s1: symbol = Symbol("title");
const s2: symbol = Symbol("title");const person = {[s1]: "程序員",[s2]: "老師",
};
// any
let a: any = "why";
a = 123;let flag = true;
function foo(): string {return "foo";
}
function bar(): number {return 123;
}
// unknow
let result: unknown;
if (flag) {result = foo();
} else {result = bar();
}// void
function sum(num1: number, num2: number): void {console.log(num1 + num2);
}
// never類型 永遠(yuǎn)不會(huì)發(fā)生值的類型
// tuple
const tInfo: [string, number, number] = ["abc", 18, 22];export {};
函數(shù)類型
// 函數(shù)的參數(shù)類型注解
function greet(name: string) {console.log("hello" + name.toUpperCase());
}console.log(greet("world"));// 函數(shù)的返回值類型
function sum(num1: number, num2: number): number {return num1 + num2;
}const names = ["abc", "cba", "nba"];
// 并未指定item的類型 但是item是string類型
names.forEach((item) => {console.log(item.toUpperCase());
});// 函數(shù)接收的參數(shù)是一個(gè)對(duì)象 z?可選類型
function printCoordinate(point: { x: number; y: number; z?: number }) {console.log("x坐標(biāo)", point.x);console.log("y坐標(biāo)", point.y);
}
printCoordinate({ x: 10, y: 30 });// 聯(lián)合類型
type ID = number | string;
// function printId(id: number | string) {
function printId(id: ID) {console.log("你的id是:", id);
}
printId(10);
printId("abc");// 類型斷言
const myEl = document.getElementById("my-img") as HTMLElement;
// const myEl = document.getElementById("my-img") as HTMLImageElement;// 非空類型斷言! 確定某個(gè)標(biāo)識(shí)符是有值的
function printMsg(message?: string) {console.log(message!.toUpperCase());
}// ??和!!的作用
// 將一個(gè)其他類型轉(zhuǎn)換成 boolean類型
// ?? 邏輯操作符 左側(cè)是null或者undefined時(shí), 返回其右側(cè)操作數(shù)
函數(shù)重載
// 函數(shù)重載
// 如果編寫了一個(gè)add函數(shù),希望可以對(duì)字符串和數(shù)字類型進(jìn)行相加
// 應(yīng)該如何編寫?
// 以下是錯(cuò)誤方式:
// function sum(a1: number | string, a2: number | string): number | string {
// return a1 + a2;
// }// 正確方式:
function sum(a1: number, a2: number): number;
function sum(a1: string, a2: string): string;
function sum(a1: any, a2: any): any {return a1 + a2;
}
console.log(sum(10, 20));
console.log(sum("aa", "bb"));export {};
聯(lián)合類型和函數(shù)重載
// 聯(lián)合類型和重載
// 需求:定義一個(gè)函數(shù),可以傳入字符串或者數(shù)組,獲取它們的長度
// 1. 聯(lián)合類型
function getLength(a: string | any[]) {return a.length;
}
// 2. 函數(shù)重載
function getLength(a: string): number;
function getLength(a: any[]): number;
function getLength(a: any) {return a.length;
}