- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) > web開(kāi)發(fā) > JavaScript >
- 一文了解TypeScript數據類(lèi)型
ts中支持更多的類(lèi)型
let age: number = 10 // Number let firstName: string = '涼宸' // String let lastName: string = '涼宸' // String let isMary: boolean = true // boolean let unde: undefined = undefined // undefined let nu: null = null // null
undefined
和 null
可以作為值賦值給其他類(lèi)型,因為這兩個(gè)可以看作其他類(lèi)型的子類(lèi)型
賦值的時(shí)候一定要根據定義的數據類(lèi)型做賦值,否則會(huì )有如下提示錯誤
有的時(shí)候我們無(wú)法確定變量類(lèi)型,我們可以將其指定類(lèi)型為any
當我們賦值給其any類(lèi)型后,可以為其賦任意值,且不會(huì )報錯
let isAny:any='任意類(lèi)型any' isAny=520 isAny=true isAny=null
但是為了避免類(lèi)型不明確,我們還是盡量少使用any
any 類(lèi)型的特點(diǎn)
let userName: any = '涼宸'; // 可以訪(fǎng)問(wèn)任意屬性 console.log(userName.name); console.log(userName.name.firstName); // 可以調用任意方法 userName.setName('David'); userName.setName('David').sayHello(); userName.name.setFirstName('David');
我們可以指定數組內元素類(lèi)型
let ages: number[] = [5, 20, 13, 14] let names: string[] = ['涼宸','路飛', '明世隱', '李楊勇']
類(lèi)數組:
類(lèi)數組是不會(huì )擁有數組擁有的方法,tsc能夠自動(dòng)識別兩者
let arguments=[555,555,55] function lei(){ let arr:number=arguments }
基本類(lèi)似于數組,但是類(lèi)型可以是多種
let arr:[number,string,boolean]=[520,'涼宸',true]
我們在賦值時(shí)一定要根據類(lèi)型順序填寫(xiě)
元素能多不能少
let arr:[number,string,boolean]=[520,'涼宸',true] arr.push('b') // 可以 arr.push(4) // 可以 arr.push(true) // 可以 console.log(arr)
let arr:[number,string]=[520,'涼宸'] arr.push('b') // 可以 arr.push(4) // 可以 arr.push(true) // 不可以 console.log(arr)
作用:
interface Point{ userName:string|number password:number } // 此時(shí)執行tsc不會(huì )解析出相應的js代碼,因為此類(lèi)型是ts特有的,只是表示約束
interface Point{ userName:string|number password:number } let value:Point={ userName:'admin@qq.com', password:123456 } let val:Point={ userName:55555, password:123456 } // 此時(shí)兩種都符合,在執行tsc // 只是出現如下代碼,沒(méi)有任何約束js var value = { userName: 'admin@qq.com', password: 123456 }; var val = { userName: 55555, password: 123456 };
可選屬性 ?
創(chuàng )建 IPerson 接口類(lèi)型變量時(shí),接口中聲明的屬性,變量賦值時(shí)也必須有,否則就會(huì )報錯
但我們可以設置某個(gè)屬性為可選屬性,在創(chuàng )建變量時(shí),就可以選擇賦值
interface Point{ userName:string|number password:number, email?:string } let value:Point={ userName:'admin@qq.com', password:123456 } let val:Point={ userName:55555, password:123456 }
只讀屬性readonly
:
interface Point{ userName:string|number password:number, email?:string, readonly address:string } let value:Point={ userName:'admin@qq.com', password:123456, address:'保定' } let val:Point={ userName:55555, password:123456, address:'北京' } value.password=65975222 value.address='kkk'
ts中函數可以定義返回值類(lèi)型
const value=():number=>{ return 1 } const val=():string=>{ return 1 }
在我們定義變量時(shí)沒(méi)有賦予類(lèi)型,則會(huì )按照值做推論
let value=5555 value='string'
let value:string|number value='涼宸' value=520 value=true
類(lèi)型斷言:
function get(data:string|number):number{ const str=data as string if(str.length){ return str.length }else { const num = data as number return num.toString().length } } console.log(get('涼宸')); console.log(get(520));
type guard:
type guard
不是一種類(lèi)型,而是一種能夠確認具體類(lèi)型的一種機制
function get(data:string|number):number{ if(typeof data==='string'){ return data.length }else { return data.toString().length } } console.log(get('涼宸')); console.log(get(520));
class:類(lèi),ES6語(yǔ)法,是js面向對象晉升,class 僅僅是語(yǔ)法糖,底層仍然是基于函數和原型實(shí)現的
三個(gè)修飾符,可以控制類(lèi)中成員的訪(fǎng)問(wèn)級別:
class Person { public name:string protected age:number private address:string constructor(name:string,age:number,address:string){ this.name=name this.age=age this.address=address } speak(){ console.log(`Person:${this.name}---${this.age}---${this.address}`) } } const Children = new Person('涼宸',20,'保定') Children.speak() // 可以正常輸出
class Person { public name:string protected age:number private address:string constructor(name:string,age:number,address:string){ this.name=name this.age=age this.address=address } speak(){ console.log(`Person:${this.name}---${this.age}---${this.address}`) } } class child extends Person{ say(){ console.log(`child:${this.name}---${this.age}`) } } // const Children = new Person('涼宸',20,'保定') // Children.speak() const childs = new child('涼宸',20,'保定') childs.say()
運行時(shí)也是報錯的
class Person { public name:string protected age:number private address:string constructor(name:string,age:number,address:string){ this.name=name this.age=age this.address=address } speak(){ console.log(`Person:${this.name}---${this.age}---${this.address}`) } } class child extends Person{ say(){ console.log(`child:${this.name}---${this.age}`) } } // const Children = new Person('涼宸',20,'保定') // Children.speak() const childs = new child('涼宸',20,'保定') childs.say()
class Person { public name:string protected age:number private address:string constructor(name:string,age:number,address:string){ this.name=name this.age=age this.address=address } speak(){ console.log(`Person:${this.name}---${this.age}---${this.address}`) } } class child extends Person{ say(){ console.log(`child:${this.name}---${this.age}`) } } const Children = new Person('涼宸',20,'保定') Children.speak() console.log(Children.address); console.log(Children.age); // const childs = new child('涼宸',20,'保定') // childs.say()
枚舉(Enum)類(lèi)型用于取值被限定在一定范圍內的場(chǎng)景
enum Week { SUNDAY = '周日', MONDAY = '周一', TUESDAY = '周二', WEDNESDAY = '周三', THURSDAY = '周四', FRIDAY = '周五', SATURDAY = '周六' } function getProgramme(date: Week): string { if (date === Week.SUNDAY) { return '周日休閑娛樂(lè )' } else if (date === Week.MONDAY) { return '周一做博文' } else if (date === Week.TUESDAY) { return '周二沖刺' } else if (date === Week.WEDNESDAY) { return '周三繼續奮斗' } else if (date === Week.THURSDAY) { return '周四發(fā)新文' } else if (date === Week.FRIDAY) { return '周五準備休息' } else { return '周六睡覺(jué)' } } console.log(getProgramme(Week.THURSDAY));
到此這篇關(guān)于一文了解TypeScript數據類(lèi)型的文章就介紹到這了,更多相關(guān)TypeScript數據類(lèi)型內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站