日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

typescript ajax,TypeScript的应用方式

發布時間:2025/3/20 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 typescript ajax,TypeScript的应用方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

> 本文不講如何安裝,只講代碼中的實際應用

# 一、什么是 TypeScript?

typescript是js的超集,它在js的基礎上增加了靜態類型校驗,可以在運行前校驗js中的一些錯誤并修正。

在定義類型之后,js中任何地方都會有文檔提示,對象中包含的值都可以提示出來,這一點讓js變得相當友好。

那么想要在已有項目中增加ts需要怎么做?

ts支持漸進式遷移,可配置只檢查部分文件,在已有項目中慢慢改造。ts的類型檢查不會影響js代碼的執行、這意味著,即便類型校驗有錯誤,代碼依舊運行良好。

ts的困難在于它需要定義所有的值類型,這個工作量還是蠻大的。

# 二、ts的簡單使用

**ts的類型定義語法如下**

- 基礎類型:

```javascript

let isDone: Boolean = false;

let str: String = '';

let count: Number = 1;

// 使用聯合操作符

let some1: Number | String = 1;

let some2: Number | String = '1';

```

- 數組

```javascript

let arr1: number[] = [1,2];

let arr2: Array = ['1','2']; // 泛型寫法,下面會講

let arr3: [string,boolean] = ['1',false]; // 元組-定義已知數量和類型

```

- 對象(當存在復雜對象時,使用接口和類來聲明,后面會講)

```javascript

let obj: {a: string, b: number } = {a: '我是字符串',b: 2};

```

- any

```javascript

let something: any = 'asd';

```

any用來表示任何類型,ts不會對它進行校驗。

>? 如果你的ts代碼中到處都是any,建議不要使用ts更方便些。

- viod、null、undefined、never

這些值基本沒什么用,有興趣可以自己查看[文檔](https://www.tslang.cn/docs/handbook/basic-types.html)

- 枚舉 **enum**

**enum**類型是對JavaScript標準數據類型的一個補充。 使用枚舉類型可以為一組數值賦予友好的名字。

```javascript

enum Color {Red, Green, Blue} // 默認情況下,從0開始為元素編號。

let c: Color = Color.Green; // => 1

//你也可以手動的指定成員的數值。 例如,我們將上面的例子改成從 1開始編號:

enum Color {Red = 1, Green, Blue}

let c: Color = Color.Green; // => 2

```

它不但可以使用key獲取value,還可以使用value獲取key。

```javascript

enum Color {Red=1, Green, Blue}

let colorName: string = Color[2]; // => 'Green'

```

# 三、ts進階使用

## 類型斷言

當你確定某個值的類型時,你可以指定它的類型。它有兩種寫法:

尖括號寫法

```javascript

let someValue: any = "this is a string"; // any未知類型

let str: string = someValue; // error someValue不是string類型

// 斷言為string,校驗成功

let str: string = someValue;

```

as寫法

```javascript

let someValue: any = "this is a string";

let str: string = someValue as string

```

## 接口interface

interface用來定義復雜類型(對象、函數、索引類型等)

```javascript

interface Config {

readonly color: string; // 定義只讀

width?: number; // 定義可選屬性

}

function doSome( option: Config ){

// option.color

// option.width

}

```

同一作用域中同名的interface會自動合并

```javascript

interface Config {

color: string;

width: number;

}

// 同一作用域中

interface Config {

height: number;

}

// 會合并為

interface Config {

color: string;

width: number;

height: number;

}

```

extentds (interface可以使用extentds進行拓展)

```javascript

interface Parent{

readonly color: string; // 可定義常量

width: number;

}

interface Children extends Parent{

height: number;

}

```

## 類

公共,私有 與 存取

1、public

```javascript

class Animal {

name: string; // 默認為public

public id: string; // 也可以標明public

}

```

2、private

```javascript

class Animal {

// private 禁止在類的外部訪問

private move() {

// dosomething

}

}

new Animal().move; // 錯誤: 'move' 是私有的.

```

3、get、set

TypeScript支持通過getters/setters來截取對對象成員的訪問。與vue的watcher同理。

```javascript

class Animal {

get fullName(): string {

return this._fullName;

}

set fullName(newName: string) {

// dosomething

}

}

```

4、readonly標明只讀

```javascript

class Animal {

readonly number: number = 8;

}

```

還有static、protected等,這里不過多說明,詳情請看[文檔。](https://www.tslang.cn/docs/handbook/classes.html)

## 函數

函數類型包含兩部分:參數類型和返回值類型。

```javascript

// :number 表示返回值為number

function add(x: number, y: number): number {

return x + y;

}

let myAdd = function(x: number, y: number): number { return x + y; };

```

聲明一個未賦值函數

```javascript

let fn: (x: number, y: number) => number;

fn = myAdd;

```

除此之外,interface同樣可以聲明函數類型

```javascript

// : boolean表示返回值為布爾值

interface Func {

(source: string, subString: string): boolean;

}

// 命名為x,y或者其他都可以

let ff: Func = (x: string, y: string): boolean => {

return x === y

}

```

函數參數類型只會校驗它的類型,不會校驗它的名字

## type類型別名

類型別名會給一個類型起個新名字。它可以作用于原始值,聯合類型,元組以及其它任何你需要手寫的類型。它的語法看起來像是普通的js。

```java

// 給String重新命名

type Easing = String

// 定義聯合類型

type Easing = 'a' | 'b' | 'c'

```

type可以將多個interface聯合或者交叉

```java

interface A{

kind: "square";

size: number;

}

interface B{

kind: "rectangle";

width: number;

height: number;

}

interface C{

kind: "circle";

radius: number;

}

type Shape1 = A | B | C; // 聯合

type Shape2 = A & B & C; // 交叉

```

type也可以聲明函數和元組

```java

// 函數

type Easing = () => string

// 元組

type DudeType = {

[key in Keys]: string // keys是一個索引類型

}

```

> type和interface功能類似,但type更像一個值而不是一個類型。在兩者都能實現需求的情況下,官方建議優先使用interface。

# 四、ts高級用法--泛型

考慮到代碼的可重用性和拓展性,ts允許使用泛型來定義未知類型,使用尖括號語法。

```javascript

// 當入參未知時,我們可定義一個泛型

function identity(arg: T): T {

return arg;

}

// 它可以這樣用,表示數組

function identity(arg: T[]): T[] {

return arg;

}

// 或者表示對象

function identity(arg: {x: T, y: T}): T {

return arg.x;

}

```

泛型支持extends語法

```javascript

interface Lengthwise {

length: number;

}

function loggingIdentity(arg: T): T {

console.log(arg.length);? // 可以用時length屬性

return arg;

}

```

泛型promise使用示例

```typescript

// Promise表示Promise.resolve的值類型是T

// catch類型默認是any

let ajax = (params: any): Promise => {

return new Promise((resolve) => {

axios.get('/list').then(res=> {

resolve(params)

})

})

}

// 使用時

ajax(params).then(res=>{

// res 類型為{a: string,b:number}

)

```

>此處只講了typescript的一些常見用法和問題,更多說明請看官方文檔。[(中文文檔3.1](https://www.tslang.cn/docs/release-notes/typescript-3.1.html),[英文文檔4.1)](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-1.html)

==一些運算操作符==

1. !斷言此處有值。

```javascript

let y!:number = 1; // 表示y必定有值

```

2. ?表示可能未定義。

```javascript

let obj = {

y?: number, // 相當于? number | undefined

z: string

}

let num: number;

num = obj.y; // error,不能將類型“number | undefined”分配給類型“number”。

```

3. ?? 空值合并。

通常我們取一個可能存在的值時,會像這樣

```javascript

let obj = {

y?: number

}

let num: number;

num = obj.y || 1;

```

但當obj.y為0時,它會存在問題。所以ts提供了更好的解決方案。??只會判斷null和undefined兩個值。

```javascript

let obj = {

y?: number

}

let num: number;

num = obj.y ?? 1; // 即使y為0,也會得到0,而不是1

```

4.!取值用法和?的賦值用法。

!表示必定有值,?表示可能有值,所以他們也可以這樣使用

當你確定值必定存在時

```javascript

let obj: {

a?: {

b?: number

}

} = { a: { b: 1 } };

let x: number = obj.a.b; // 報錯,對象可能未定義

let y: number = obj!.a!.b; // 通過

```

當你不確定值是否存在

```javascript

let obj: {

a?: {

b?: number

}

}

obj.a.b = 1; // 報錯

obj?.a?.b = 1; // 通過

```

5. !(放在value之后)允許null和undefined

```javascript

let y:number

y = null// 無法通過編譯

y = undefined// 無法通過編譯

y = null!? ? ? // 通過

y = undefined! // 通過

```

6. 最新特性??=、||=、&&=

有時候我們需要對可能存在的值給一個默認值

```javascript

let obj = {

y?: number

}

// 正常情況

obj.y = obj.y ? obj.y : 1;

// 使用??空值合并

obj.y = obj.y ?? 1;

// 使用??=運算符,他看起來有點像 +=和-=

obj.y ??= 1;

```

總結

以上是生活随笔為你收集整理的typescript ajax,TypeScript的应用方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成年人毛片 | 一区二区三区爱爱 | 欧美不卡影院 | 国产精品高潮呻吟视频 | 三上悠亚痴汉电车 | 久久99久久99精品中文字幕 | 久久久久免费看 | 国产午夜福利视频在线观看 | 男男野外做爰全过程69 | 爱爱精品视频 | 亚洲日本久久久 | 一边摸一边做爽的视频17国产 | 三上悠亚中文字幕在线播放 | 51精品国自产在线 | 乱一色一乱一性一视频 | 国色综合 | 日本一区二区三区在线播放 | 婷婷天堂 | 日韩理论片 | 少妇性bbb搡bbb爽爽爽欧美 | 在线免费观看h片 | 毛片a | 成人午夜av在线 | 国产精品久久久不卡 | 精品久久久久久久久久久久久久 | 免费黄色短片 | 风间由美一区二区 | 日韩成人中文字幕 | 免费三级在线 | 聚色av| 91精品一区二区三区四区 | 国产精品视频一 | 97福利社| 91成人免费在线 | 亚色在线观看 | 国产一国产二国产三 | 波多野结衣亚洲天堂 | 干美女视频 | 原神女裸体看个够无遮挡 | 91视频高清 | 亚洲色婷婷久久精品av蜜桃 | 欧美精品久久久久久久久老牛影院 | 无码人妻精品一区二区三区蜜桃91 | 视频在线观看电影完整版高清免费 | 日本精品一区 | 庆余年三| 91免费国产在线 | 久久人人爽人人人人片 | 日日爱视频 | 国产网红在线观看 | 国产伦人伦偷精品视频 | 亚洲国产无码精品 | 捆绑调教视频网站 | 日本黄xxxxxxxxx100| 蜜臀精品 | 老妇裸体性激交老太视频 | 亚洲一区二区三区四区在线 | 免费黄av | 国产精品网站视频 | 日本一级免费视频 | 免费在线观看一区二区三区 | 无码人妻精品一区二区50 | 国产啊v在线 | 人妻精品无码一区二区 | 成人av久久 | 麻豆美女视频 | 欧美人与zoxxxx另类 | 男人免费网站 | 韩国成人免费视频 | 99精品久久精品一区二区 | 97在线视频免费观看 | 男女激情在线观看 | 熟女一区二区三区四区 | 亚洲精品免费在线观看 | 激情小视频 | 7788色淫网站小说 | 日韩精品资源 | 国产91福利 | 天天干天天操天天操 | 一道本无吗一区 | 永久毛片 | 国产一区二区三区观看 | 一起操网址 | 免费看av在线 | 亚洲免费三级 | 免费麻豆国产一区二区三区四区 | 欧美乱大交xxxxx潮喷l头像 | 人妻体体内射精一区二区 | 嫩嫩av| 欧美日韩成人网 | 奇米中文字幕 | 色资源在线观看 | 韩国三色电费2024免费吗怎么看 | 国产精品亚洲第一 | 国产三级精品在线观看 | 精品人妻一区二区三区换脸明星 | 日b视频在线观看 | 91免费看黄| 精久久久久久久 |