-
n
查看全部 -
t
查看全部 -
interface?User{ ??name:string ??age:number } type?UserType?=?{ ????name:string ??age:number } type?UserType1?=?User; class?Person?extends?User{ ????email:string }
查看全部 -
開始學(xué)習(xí),筆記
查看全部 -
111分團(tuán)成不不不
查看全部 -
查看全部
-
筆記
查看全部 -
// 索引類型
const product = {
? ? name: 'Nick',
? ? price: 100
}
const products = {
? ? 1: {
? ? ? ? name: 'Nick',
? ? ? ? price: 100
? ? },
? ? 2: {
? ? ? ? name: 'adidas',
? ? ? ? price: 150
? ? }
}
interface Product {
? ? name: string,
? ? price: number
}
interface Products {
? ? [id: number]: Product
}
// 定義對(duì)象時(shí)
interface Obj {
? ? [key: string | number]: string | number | boolean | {} | null | undefined;
}
// 映射類型
// 通過已有類型創(chuàng)建新類型、通過操作符創(chuàng)建新類型
// keyof
type Keys = keyof Product; // 'name' | 'price' 以對(duì)象類型的key 的字面量作為新類型。
type Tp = typeof product; // typeof 后跟的是具體值,不能跟類型。typeof 獲取值的類型后,用來創(chuàng)建新的類型。
const keys: Keys = 'name';
const tp: Tp = {
? ? name: 'lining',
? ? price: 100
}
查看全部 -
instanceof 一般是用在class 這種對(duì)象上的,不能用在基本類型上,基本類型使用typeof 。
// 類型斷言
const lengthFun = (a: string | number) => {
? ? return (a as string).length; // 一般不使用<>做斷言,是因?yàn)闀?huì)和Reat 語法沖突。
}
// 類型斷言,不到萬不得已不要用,因?yàn)槭褂脭嘌跃褪チ藅s 自動(dòng)推斷類型和使用類型限制的意義。
// 類型保護(hù)typeof 和 instanceof
// typeof
const lengthFun1 = (a: string | number): number => {
? ? if(typeof a === 'string') {
? ? ? ? return a.length;
? ? }
? ? if(typeof a === 'number') {
? ? ? ? return a.toString().length;
? ? }
? ? return 0;
}
// instanceof
class Man {
? ? name: string;
? ? age: number;
? ? constructor(name: string, age: number) {
? ? ? ? this.name = name;
? ? ? ? this.age = age;
? ? }
}
class Woman {
? ? gender: string;
? ? tel: number;
? ? constructor(gender: string, tel: number) {
? ? ? ? this.gender = gender;
? ? ? ? this.tel = tel;
? ? }
}
const Fun = (a: Man | Woman): (string | number) => {
? ? if(a instanceof Man) {
? ? ? ? return a.name;
? ? }
? ? if(a instanceof Woman) {
? ? ? ? return a.tel;
? ? }
? ? return 666;
}
查看全部 -
1
查看全部 -
來了
查看全部 -
枚舉類型
1、數(shù)字枚舉
enum?numEnum{ ??Pending,?//?0 ??Shipped,?//?1 ??Completed,?//?2 ??Cancelled,?//?3 ??Unknown?//?4 }
2、字符串枚舉
enum?strEnum{ ??Pending?=?'Pending', ??Shipped?=?'Shipped', ??Completed?=?'Completed', ??Cancelled?=?'Cancelled', ??Unknown?=?'Unknown' }
3、異構(gòu)枚舉
//?異構(gòu)枚舉就是枚舉值中成員值既有數(shù)字類型又有字符串類型(但是不能有值是空的) //?異構(gòu)?isomerism enum?isomerismEnum{ ??Pending?=?'Pending', ??Shipped?=?'Shipped', ??Completed?=?2, ??Cancelled?=?'Cancelled', ??Unknown?=?'Unknown' }
4、常量枚舉
//?常量枚舉,就是在定義枚舉的語句之前加上const?關(guān)鍵字,這樣編譯后的代碼不會(huì)創(chuàng)建這個(gè)對(duì)象,只是會(huì)從枚舉里拿到相應(yīng)的值進(jìn)行替換 enum?Status?{ ??Off, ??On } const?enum?Animal?{ ??Dog, ??Cat } const?status?=?Status.On; const?animal?=?Animal.Dog;
上面的代碼編譯成 JavaScript 之后是這樣的:
var?Status; (function(Status)?{ ??Status[(Status["Off"]?=?0)]?=?"Off"; ??Status[(Status["On"]?=?1)]?=?"On"; })(Status?||?(Status?=?{})); var?status?=?Status.On; var?animal?=?0;?//?Dog
注意,枚舉值是只讀的,不能夠修改。
二、表驅(qū)動(dòng)
表驅(qū)動(dòng),就是為了去除if...else.. 和switch 這種語法的。
查看全部 -
TS 變量聲明格式:變量名 + 類型注解。
當(dāng)變量賦值與聲明類型不一致的時(shí)候,TS 會(huì)提醒類型校驗(yàn)不一致。
const?aNum:?number?=?123;?//?數(shù)字類型 const?aStr:?string?=?'Hello?ts';?//?字符串類型 const?aBool:?bool?=?true;?//?布爾類型 const?aNull:null?=?null;?//?null?類型,值只能是null const?aUndefined:?undefined?=?undefined;?//?undefined?類型,值只能是undefined const?aSymbol:?symbol?=?Symbol();?//?symbol?類型,表示獨(dú)一無二,每次聲明的數(shù)據(jù)都是不同的 const?bSymbol:?symbol?=?Symbol();?//?用作私有屬性、解決命名沖突問題 console.log(aSymbol?===?bSymbol);?//?輸出?false console.log(Number.MAX_VALUE);?//?JS?支持的最大數(shù)值:Number.MAX_VALUE const?aBigint:bigint?=?123456789123456789n;?//?處理比JS支持最大的數(shù)還大的數(shù)值 const?bBigint:?bigint?=?Bigint(123456789123456789);?//?兩種定義Bigint?變量的方法 const?sArr:?string[]?=?['a',?'b',?'c'];?//?字符串?dāng)?shù)組 const?nArr:?number[]?=?[1,?2,?3];?//?數(shù)字?jǐn)?shù)組 const?bsArr:?Array<string>?=?['a',?'b',?'c'];?//?包裝類型 const?bnArr:?Array<number>?=?[1,?2,?3];?//?包裝類型 const?lhArr:?Array<number?|?string>?=?[1,?2,?3,?'4'];?//?聯(lián)合類型 const?aTuple:?[string,?number]?=?['a',?1];?//?tuple?元組類型,是特殊的數(shù)組,顯式的定義數(shù)組每一項(xiàng)元素類型和元素?cái)?shù)量上限,并且一一對(duì)應(yīng)。 aTuple.push(8);?//?元組可以添加元素,但是不能讀 aTuple[2];?//?會(huì)提醒?Tuple?type?'[string,?number]'?of?length?'2'?has?no?element?at?index?'2' const?bTuple:?[string,?number,?number]?=?['abc',?1,?8];?//?tuple?元組新增元素,要一一對(duì)應(yīng) //?函數(shù)定義,一般兩種類型:箭頭函數(shù)、function //?一、箭頭函數(shù) const?aFun?=?()?=>?false;? //?函數(shù)類型定義 const?aFun:?()?=>?boolean?=?()?=>?false;?//?`()?=>?boolean`?就是定義的函數(shù)類型 //?如果有參數(shù) const?aFun:?(params:?string)?=>?boolean?=?()?=>?false;?//?`(params:?string)?=>?boolean`?就是定義的函數(shù)類型 //?二、普通function?函數(shù) function?bFun()?{ ????return?true; }? //?函數(shù)類型定義 function?bFun(params:?string):?boolean?{ ????return?true; } //?推薦使用箭頭函數(shù),方便提取函數(shù)類型定義 type?Fun?=?(params:?string)?=>?boolean; const?cFun:?Fun?=?()?=>?false; const?dFun:?Fun?=?()?=>?false; type?Fun?=?(params:?string)?=>?void;?//?如果函數(shù)沒有返回值 //?對(duì)象,這樣定義比較寬泛 const?aObj:?object?=?{ ????a:?1, ????b:?2 } //?對(duì)象,類型定義越具體越好,工作中一般如下定義 const?bObj:?{?a:?string,?b:?string?}?=?{ ????a:?'hello', ????b:?'world' } //?對(duì)象定義類型也可以提取,用interface interface?Obj?{?a:?string,?b:?string?} const?cObj:?Obj?=?{?a:?'hi',?b:?'typescript'?} //?void?類型,沒有任何返回值 //?注意以下返回值為空的函數(shù)類型定義方式 const?aVoid?=?():?void?=>?{}; const?bVoid:?()?=>?void?=?()?=>?{} type?Fun?=?(params:?string)?=>?void; const?cVoid:?Fun?=?()?=>?{} //?any?就相當(dāng)于沒有類型定義,和js?一樣了,可以隨便賦值。 //?never?永遠(yuǎn)沒有返回值,一般高級(jí)編程會(huì)用,日常很少 const?aNever?=?():?never?=>?{ ????throw?new?Error() } const?bNever?=?():?never?=>?{ ????while(true)?{} }
查看全部 -
在線學(xué)習(xí)Typescript 的網(wǎng)站:
TS 官方網(wǎng):https://www.typescriptlang.org/??
導(dǎo)航菜單選擇-> Playground 即可在線開發(fā)學(xué)習(xí)。
npm 搭建適合TS 開發(fā)環(huán)境:
1.?npm?init?初始化前端開發(fā)環(huán)境 2.?npm?i?typescript?-g?全局安裝TS 3.?tsc?--init?生成初始化TS?配置文件 4.?package.json?文件,添加?scripts?命令:`"build":?"tsc"` 5.?tsconfig.json?文件,修改?`"outDir":?"編譯后生成js?的存放位置"`
查看全部 -
定義變量的類型,意味著什么?
以Number 類型為例:
內(nèi)存大?。?4個(gè)bit 代表一個(gè)Number 類型 ;
內(nèi)存布局:總共0~64 個(gè)Bit,第63 位表示正負(fù)號(hào)S、52~62 位表示指數(shù)級(jí)E、0~51 位表示真實(shí)的數(shù)字M;
變量行為:即可操作的方法,如:toFixed。
弱類型變量,會(huì)根據(jù)代碼情景,自動(dòng)轉(zhuǎn)換變量類型。
typeof 用于判斷變量類型。
var?num?=?0; console.log(typeof?num);
TS 強(qiáng)制類型轉(zhuǎn)換:
let?a:?any?=?1; (a?as?string)?=?'2'; //?注意:強(qiáng)制類型轉(zhuǎn)換使用as?和?括號(hào)()
JS 和 TS 都有類型系統(tǒng),區(qū)別是:
JS 是弱類型 + 動(dòng)態(tài)類型語言
TS 是強(qiáng)類型 + 靜態(tài)類型語言
查看全部
舉報(bào)