函数没有“as”子句;假定返回类型为 object。_TypeScript笔记(一)类型amp;接口...
數據類型
TS是強類型的JS,TS會被編譯成JS在瀏覽器環境下運行,在遇到類型錯誤時,TS會在編譯時類型檢查并報錯,在上傳到服務器之前報錯,這就意味著用戶不會感知到TS的類型錯誤,而JS在執行時報錯,只有在執行到代碼塊時才會發現錯誤;并且在寫TS時,只要遇到類型錯誤都會有提示,可以提前預防很多錯誤。
目前JS有七種數據類型分別是 object string number boolean null undefined symbol,在TS的數據類型中,新增了五種:enum any void never unknown
let object: object; // 聲明對象 let str: string; // 聲明字符串 let num: number; // 聲明數值 let bool: boolean; // 聲明布爾值Null和Undefined
let u: undefined; let n: null;這將意味著u和n無法被重復賦值
null和undefined是所有類型的子類型,因此任意類型的值都可以接受undefined,null
let num: number = undefined;在TS里,聲明數組的方式有兩種:
let arr1: string[]; // 聲明string類型的數組 let arr2: Array<string>;多維數組只有一種聲明方式:
let arr3: Array<Array<string>>;此外TS提供元組:允許表示一個已知元素數量和類型的數組,各元素的類型不必相同。
let arr4: [string, number];// 聲明一個包含兩個元素的數組,第一項類型為string,第二項為number枚舉enum為一組數值提供名字
enum Subject{Chinese,English } let ch:Subject = Subject.Chinese; console.log(ch); // 0 let en:Subject = Subject.English; console.log(en); // 1默認索引從0開始,語文是0,英語是1, 可以設置從某個值開始,也可以設定為有意義的字符串
enum Subject{Chinese = 'ch',English = 'en' } let ch:Subject = Subject.Chinese; console.log(ch); // ch let en:Subject = Subject.English; console.log(en); // enany表任意類型
let arr5: any[] = [1, '2', '', {}]; //聲明一個包含任意類型的數組 function fn(name: any){ // 聲明一個參數name為任意類型的函數console.log(name) }void類型,一般用作函數返回值的類型
當確定函數沒有返回值時使用,使用return將提示錯誤
function fn(name: any): void{ console.log(name); }never 表示的是那些永不存在的值的類型
never類型是那些總是會拋出異常或根本就不會有返回值的函數表達式或箭頭函數表達式的返回值類型; 變量也可能是never類型,當它們被永不為真的類型保護所約束時。function error(): never{ // 專門用來拋出錯誤throw new Error(`It's an error!`); }function submit(number:number){if(number){error()} } submit(1) // Error: It's an error!unknown 未知類型
unknown 比 any 安全,unknown 類型的值不可以隨意操作
interface Data {[key: string]: unknown }interface SetupContext {attrs: Dataslots: Slotsemit: (event: string, ...args: unknown[]) => void }類型斷言:假定程序員已經進行了類型檢查,TS編譯器不再對已經斷言的變量進行特殊的類型檢查,斷言表示我確定,我保證類型沒有問題
let vari = '123' console.log((<string>vari).split('')) // 尖括號語法 console.log((vari as string).split('')) //as語法但是如果編譯器發現斷言的類型是錯的,依然會提示錯誤
TS中的類型轉換
TS是強類型,非常抵抗變量的類型變來變去,比如使用 +string,number+'' ,!!number,如果確實需要的話,聲明一個新的變量指定類型
let num: number = 1; let str: string = num.toString()最好使用Number() String() .toString() Boolean() JSON.stringify() JSON.parse()等顯式類型轉換
接口 interface
TS會對變量的結構進行類型檢查,接口就是來定契約的
interface Personq { // 定義一個對象接口name: stringage: numbergender: string }let person: Personq = { name: 'alias', age: 18, gender: 'women' }interface提供只讀屬性,可選屬性,額外屬性,屬性也可為函數
interface Persoxn {name: stringreadonly age: number // 只讀屬性gender?: string // 可選屬性[propName: string]: any // 額外屬性:當不確定還需要哪些屬性,可用propName占位say(word: string): void //函數 }函數接口
interface Function{(name:string,age:number): void }let fn: Function = (name,age)=>{} fn('alias', 18)ps: 如果函數在聲明時不指定參數不會有錯誤提示,但在調用時會提示
接口就是用代碼描述一個對象必須有什么屬性(包括方法),但如果想傳入額外的屬性可以使用類型斷言
interface SquareConfig { // 定義一個正方形的配置width?: number; }function createSquare(config: SquareConfig) { // 創建一個正方形return config; } let mySquare = createSquare({ width: 100, color: 0.5 } as SquareConfig); // 額外添加color配置 console.log(mySquare);數組接口
interface PriceArray {[idx: number]: number; }let arr: PriceArray; arr = [11, 12];let myStr: number = arr[0]; console.log(myStr);接口的繼承
一個接口可以繼承另一個接口的屬性或方法
interface clerk{skill1: any }interface leader extends clerk{skill2: any }interface boss extends leader{skill3: any }let myBoss = <boss>{}; // 類型斷言 myBoss.skill1 = 'xx' myBoss.skill2 = 'yy' myBoss.skill3 = 'zz'END!
總結
以上是生活随笔為你收集整理的函数没有“as”子句;假定返回类型为 object。_TypeScript笔记(一)类型amp;接口...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DigitalOcean云服务器升级最新
- 下一篇: Nginx之为已安装nginx动态添加模