TypeScript之元組、數(shù)組、多維數(shù)組定義方法以及?as?const說明
在 TypeScript 中聲明和初始化數(shù)組也很簡(jiǎn)單,和聲明數(shù)字類型和字符串類型的變量也差不多,只不過在指定數(shù)組類型時(shí)要在類型后面加上一個(gè)中括號(hào) []
語法格式
const array_name: dataype[] = [val, val2];
示例
聲明一個(gè) string 類型的數(shù)組
const character: string[] = ["楊過", "小龍女"];
一維數(shù)組類型
聲明一個(gè) number 類型的數(shù)組
const numb: Number[] = [2, 4, 6, 8]; // 等同于 const numb2: Array<number> = [2, 4, 6, 8];
聲明一個(gè) string 類型的數(shù)組
const str: String[] = ['西安', '北京', '上海']; // 等同于 const str2: Array<string> = ['西安', '北京', '上海'];
聲明一個(gè) string 或者 number 類型的數(shù)組
const array2: (string | number)[] = ['孟浩然', 99]; // 等同于 const array: Array<string | number> = ['孟浩然', 99];
除了使用中括號(hào) [] 的方法來聲明數(shù)組,你還可以使用 數(shù)組泛型 來定義數(shù)組
語法格式
const array_name: Array<dataype> = [val, val2];
示例
聲明一個(gè) number 類型的數(shù)組
const array_name: Array<Array<datatype>> = [[val1, val2, val3],[v1, v2, v3]]; // 等同于 const array_name: datatype[][] = [[val1, val2, val3]];
多維數(shù)組類型
TypeScript 支持多維數(shù)組。一個(gè)數(shù)組的元素可以是另外一個(gè)數(shù)組,這樣就構(gòu)成了多維數(shù)組。多維數(shù)組的最簡(jiǎn)單形式是二維數(shù)組。
語法格式
const test: Array<Array<string>> = [['獅子頭'], ['清蒸鱸魚']]; // 等同于 const test: string[][] = [['獅子頭', '清蒸鱸魚', '鮮椒牛蛙'], ['北京烤鴨'], ['地鍋雞', '餓了']];
聲明一個(gè)二維數(shù)組
注意:
以下示例中類型在數(shù)組中的,則會(huì)限制內(nèi)層數(shù)組的元素?cái)?shù)量
Array<[string]> : 表示內(nèi)層數(shù)組的元素是 string 類型,限制元素?cái)?shù)量是 1 個(gè),輸入多個(gè)會(huì)報(bào)錯(cuò)
const test3: Array<[string]> = [['甘雨'], ['我的']]; // 等同于 const test3: [string][] = [['甘雨']]; // error // 不能將類型“[string, string]”分配給類型“[string]”。 // 源具有 2 個(gè)元素,但目標(biāo)僅允許 1 個(gè)。 const test3: [string][] = [['甘雨', '我的']];
Array<[string, string]> : 表示內(nèi)層數(shù)組的元素是 string 類型,限制元素?cái)?shù)量是 2 個(gè)
建議:
在定義數(shù)組類型的時(shí)候使用數(shù)組泛型定義,這樣顯得更直觀一點(diǎn)
2、元組的定義
// 類型固定的元組
// let arrAny: any[] = [1, 'TEST']; 奇葩且沒有意義的寫法,不推薦
let tuple1: [number, string, boolean] = [1, 'TEST', false];
// 數(shù)組和元組的區(qū)別
// 利用函數(shù)動(dòng)態(tài)拼合一個(gè)元組
function useFetch() {
const response: string = "Barry";
const age: number = 25;
return [response, age] as const;
}
// 這里如果不使用 as const 會(huì)發(fā)現(xiàn) 我們結(jié)構(gòu)出來的數(shù)組類型是response: string | number
// 使用完 as const 以后 為string,as const 也叫類型斷言
const [response] = useFetch() // 發(fā)現(xiàn) const response: string | number
// 數(shù)組轉(zhuǎn)化元組 泛型
function useFetch2() {
const response: string = "Barry";
const age: number = 25;
return tuplify(response, age)
}
function tuplify<T extends unknown[]>(...elements: T): T {
return elements;
}一、元組 && 數(shù)組
在 TypeScript 中,元組表示 這個(gè)數(shù)組有不同的類型 。簡(jiǎn)單的一句話來表述,如果類型相同的一組數(shù)據(jù)就是數(shù)組,反之就是元組;數(shù)組的 api 對(duì)于元組來講也是通用的(push、pop等),只是類型不同;
1、數(shù)組的定義
//定義數(shù)組的方式
let arr: number[] = [1, 2, 3]; //第一種: 必須全部是number類型;
let arr2: Array<number> = [1, 2, 3]; // 第二種
let arr3: Array<number> = new Array(4); // 第三種:表示定義一個(gè)數(shù)組的長(zhǎng)度,一般固定一個(gè)數(shù)組的長(zhǎng)度時(shí)這個(gè)方法比較方便
let arr4 = new Array<number>(4); //這種寫法和 arr3 效果是一樣的
console.log(arr3.length);
// interface 定義
interface NumberArray {
[index: number]: number;
}
let arr5: NumberArray = [1, 2, 3];
//類數(shù)組
function sum() {
let args: IArguments = arguments;
// args.callee()
}二、as const
1.不強(qiáng)制類型轉(zhuǎn)換
as const 被稱為 const 類型斷言,const 類型斷言告訴編譯器,要將這個(gè)表達(dá)式推斷為最具體的類型,如果不使用它的話,編譯器會(huì)使用默認(rèn)的類型推斷行為,可能會(huì)把表達(dá)式推斷為更通用的類型。
注意這里 const 是類型斷言,不是強(qiáng)制轉(zhuǎn)換,在 typescript 中,const 類型斷言,會(huì)從編譯后的 JavaScript 中完全刪除,所以使用或者不使用 as const 的應(yīng)用程序,在運(yùn)行時(shí)完全沒有區(qū)別。
所以 as const 只是讓編譯器更好的了解代碼的意圖,讓它更加精確的區(qū)分正確和錯(cuò)誤的代碼。
2.強(qiáng)制類型轉(zhuǎn)換
// 強(qiáng)制類型轉(zhuǎn)換
function getLength(str: string | number): number {
// if((<String>str).length) 上下兩種方式
if ((str as string).length) {
return (<String>str).length
} else {
return str.toString().length;
}
}3.類型別名
// 類型別名
type Name = string;
type NameResolver = () => string;
type NameOrResolver = Name | NameResolver;
function getName(n: NameOrResolver): Name {
if (typeof n === 'string') {
return n
}
}
// interface 實(shí)現(xiàn) 類型
interface A {
}
function helper(options: A): A {
return options
}到此這篇關(guān)于TypeScript之元組、數(shù)組、多維數(shù)組定義方法以及 as const說明的文章就介紹到這了,更多相關(guān)TypeScript之元組、數(shù)組、多維數(shù)組以及 as const內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- TypeScript 數(shù)組Array操作的常用方法
- TypeScript數(shù)組的定義與使用詳解
- typeScript中數(shù)組類型定義及應(yīng)用詳解
- TypeScript編寫自動(dòng)創(chuàng)建長(zhǎng)度固定數(shù)組的類型工具詳解
- TypeScript實(shí)現(xiàn)數(shù)組和樹的相互轉(zhuǎn)換
- TypeScript調(diào)整數(shù)組元素順序算法
- TypeScript中Array(數(shù)組)聲明與簡(jiǎn)單使用方法
- TypeScript之元組、數(shù)組及as?const的使用
- TypeScript判斷兩個(gè)數(shù)組的內(nèi)容是否相等的實(shí)現(xiàn)
- TypeScript數(shù)組實(shí)現(xiàn)棧與對(duì)象實(shí)現(xiàn)棧的區(qū)別詳解
相關(guān)文章
js實(shí)現(xiàn)各瀏覽器全屏代碼實(shí)例
本篇文章給大家分享了js實(shí)現(xiàn)各瀏覽器全屏的詳細(xì)代碼,有興趣的朋友可以參考學(xué)習(xí)下。2018-07-07
javascript創(chuàng)建和存儲(chǔ)cookie示例
javascript創(chuàng)建和存儲(chǔ)cookie,cookie是存儲(chǔ)于訪問者的計(jì)算機(jī)中的變量,下面看一下使用示例吧2014-01-01
jQuery入門問答 整理的幾個(gè)常見的初學(xué)者問題
大家可能看到了,我已經(jīng)將過去寫的兩篇jQuery的教程刪掉了,因?yàn)楦郊淮嬖诹说鹊葐栴},所以刪除了,從今天開始我就寫jQuery教程第二版了!希望大家能夠支持我!2010-02-02
Js中setTimeout()和setInterval() 何時(shí)被調(diào)用執(zhí)行的用法
本篇文章,小編將為大家介紹Js中setTimeout()和setInterval() 何時(shí)被調(diào)用執(zhí)行的用法,有需要的朋友可以參考一下2013-04-04
JavaScript入門教程(6) Window窗口對(duì)象
他是JavaScript中最大的對(duì)象,它描述的是一個(gè)瀏覽器窗口。一般要引用它的屬性和方法時(shí),不需要用“window.xxx”這種形式,而直接使用“xxx”。一個(gè)框架頁面也是一個(gè)窗口。2009-01-01
JavaScript高級(jí)程序設(shè)計(jì)(第3版)學(xué)習(xí)筆記13 ECMAScript5新特性
通常而言,JavaScript由ECMAScript核心、BOM和DOM三部分構(gòu)成,前面的文章將ECMAScript核心部分粗略的過了一篇2012-10-10

