[TOC]
>[success] # TypeSprict -- 基礎類型
~~~
1.'TypeSprict ' 和 'JavaSprict' 的類型是基本一致,'TypeSprict' 依次是:
1.1 'boolean' -- 布爾類型,定以后可以賦值true/false 和Boolean()對象
1.2 'number' --數字類型,,定以后可以賦值'2/8/10/16進制','整數類型',
'小數類型','NaN','Infinity(表示無窮大)'
1.3 'string' -- 字符串類型
1.4 '數組類型' -- '類型[]' /' Array<類型>'
1.5 '元組類型' -- '[類型]'
1.6 'enum' -- 枚舉
1.7 'any' -- 任意類型
1.8 'void' -- 空置,定義方法時候沒有返回值使用
1.9 'null/undefined' -- 'Null 和 Undefined'
1.10'never' -- 不存在類型一般用于錯誤處理函數.例如'拋出異常'/'死循環'
1.11'object' -- ts 中是泛指非所有非原始類型
1.12'類型斷言' -- 可以理解成斷定這個類型是自己斷言設置的類型
2.基本類型使用的時候,通過冒號分割,以冒號左邊為變量名,右面是變量的
類型
3.下面的案例建議在剛才的'example' 文件下創建一個'.ts'文件,并且在這個文
件中引入對應在'example' 創建的ts文件,例如: 在'example' 創建了一個
'basic-type.ts'文件,在'index.ts' 引入時需要寫:import './example/basic-type'
4.注意'let' 和 'const' 變量聲明修飾問題,在第一個案例中會詳細說明,其他
案例同理
~~~
>[info] ## let 和 const 注意事項
~~~
1.兩者區別'const' 必須定義就賦值,但'let' 定義時候可以不賦值,但使用時候
必須賦值
~~~
>[danger] ##### const
* 錯誤示范 如果使用const聲明變量,在初始的時候沒有賦值是不被允許的
~~~js
const name1 : string
~~~
* 正確寫法
~~~js
const name1 : string = 'wang'
console.log(name1) // 打印結果 wang
~~~
>[danger] ##### let
~~~js
1.let 和 const 最大的區別'let' 允許 定義時不用賦值,但使用前必須賦值
~~~
* 錯誤示范
~~~js
let name1 : string // 這一步是正確的可以定義不賦值
console.log(name1) // 錯誤的 使用時候必須要賦值
~~~
* 正確操作
~~~js
let name1 : string // 當然也可以寫成 let name1:string = 'wang'
name1 ='wang'
console.log(name1) // 打印結果是wang
~~~
>[info] ## 基本類型寫法
>[danger] ##### ts 是帶隱式類型推斷
~~~
1.ts 會推斷你當前變量的類型
~~~
>[danger] ##### 布爾類型 -- boolean
~~~
1.只能賦值true 或者 false和Boolean()對象
~~~
* 賦值為true 和 false
~~~js
let bool:boolean = true // 只能賦值true 或者 false 和Boolean()對象
bool = false // 重新賦值
console.log(bool) // 打印結果false
~~~
* 賦值為Boolean()對象
~~~js
let bool: boolean = Boolean(1);
console.log(bool) // true
~~~
>[danger] ##### 數字類型 -- number
~~~
1.ts 和 js 一樣,TypeScript里的所有數字都是浮點數。不像java中有整數類
型、雙精度類型等等,因為'ts' 的 數字表現形式是'number'
2.定義成number 只能賦值有:
'二進制'、'八進制'、'十進制'、'十六進制'、
'整數類型和小數類型(整數類型可以算進十進制)'、'NaN(非數字類型)'、
'Infinity(表示無窮大)'
~~~
[可以參考js數字類型 -- 作者 醬路油過](http://www.hmoore.net/cyyspring/more/1016606#Number__68)
~~~js
let binNum:number = 0b110 // 二進制
let octNum:number = 0o6 // 八進制
let num:number = 6// 十進制
let hexNum:number = 0x6 // 十六進制
let maxNum:number = Infinity // 無窮大
let minNum:number = -Infinity // 無窮小
let isNaNum:number = NaN // 表示非數值類型
console.log(binNum) // 6
console.log(octNum) // 6
console.log(num) // 6
console.log(hexNum) // 6
console.log(maxNum) // Infinity
console.log(minNum) // -Infinity
console.log(isNaNum) // NaN
~~~
>[danger] ##### 字符串類型 -- string
~~~
1.字符串也支持es6的`` 拼接寫法
~~~
~~~
// 字符串類型
let num:number = 1
let str: string
str = 'abc'
str = `數值${num}` // 使用es6 拼接 ``
console.log( str )
~~~
>[danger] ##### 數組類型
~~~
1.數組類型是用來限制數組內部元素的類型,寫法有兩種
'「類型 + 方括號」表示法','數組泛型'
~~~
* 「類型 + 方括號」
~~~
// 第一種寫法
let arr: number[]
arr = [1]
~~~
* 泛型
~~~
// 第二種寫法泛型
let arr2: Array<number>
arr2 = [1]
~~~
* 聯合類型
~~~
// 聯合類型(下面案例顯示可以是數字字符串類型)
let arr3: (string|number)[]
arr3 = [2,'3']
// 聯合類型泛型的形式
let arr4: Array<string|number>
arr4 = [2,'3']
~~~
>[danger] ##### 元組類型
~~~
1.元組類型 固定長度固定類型
2.順序必須一一對應
3.2.6版本后不不準在越界超過定義數組長度
4.但是可以'push' 往里面添加元素,但只能添加定義好的聯合類型
~~~
~~~js
let tuple: [string, number, boolean]
tuple = ['a',1,true]
tuple.push("1") // 可以push
tuple.push(Symbol("a")) // 報錯不是元組中聯合類型
~~~
>[danger] ##### 枚舉類型 -- enum
~~~
1.寫法:'enum 變量名 {}',變量名第一個單詞一般大寫
2.使用場景:當后臺開發人員將一些特定的內容通過,特殊含義的數字提供給
我們時候,這個舉個例子:權限后臺返回給我們0 代表管理員,1代表普通
用戶,我們需要結合寫一些注釋提供給其他接下來的維護,前端人員說明,現
在可以利用枚舉值
3.默認順序從0開始
~~~
* 枚舉類型定義參數點定義變量返回的是數值
~~~js
enum Roles {
SUPER_ADMIN,
ADIMN,
USER
}
console.log(Roles.SUPER_ADMIN)// 返回的是0
// 后臺返回的這種數據不一定是從0 開始 我么你想自定制怎么辦
// 可以在后面去賦值,可以三個都賦值,也可以指定賦值其中一個
// 后面的排序會根據上一個進行 累加1
enum Roles2 {
SUPER_ADMIN,
ADIMN = 3,
USER
}
console.log(Roles2.SUPER_ADMIN)// 返回的是0
console.log(Roles2.USER)// 返回的是4
~~~
* 枚舉類型[對應枚舉數值]返回的是定義名稱
~~~js
enum Roles {
SUPER_ADMIN,
ADIMN,
USER
}
console.log(Roles[2])// USER
~~~
>[danger] ##### 任意類型 -- any
~~~js
1. 這些值可能來自于動態的內容,比如來自用戶輸入或第三方代碼庫。 這
種情況下,我們不希望類型檢查器對這些值進行檢查而是直接讓它們通過編
譯階段的檢查。 那么我們可以使用any類型來標記這些變量
2.使用any 等同于 :
let something;
something = 'seven';
something = 7;
~~~
~~~js
// any任意類型 少用
let value: any
value = 1
value = '1'
// 利用any 定義數組
const arr4: any[] = [1,'a']
~~~
>[danger] ##### 空值 -- void
~~~
1.它表示沒有任何類型
2.當變量定義的時候只能賦值'undefined' (官方文檔說變量定義這個一般沒多大用)
3.變量的時候也可以賦值null 但需要修改配置文件給'"strictNullChecks":?false,'
4.當函數定義的時候表示函數沒有任何返回值
~~~
~~~
let anyParams: void = undefined
// let anyParams2:void = null 可以賦值null 但需要修改配置文件
// 沒有返回值的函數
const consoleText = (text:string):void => {
console.log(text)
}
consoleText('測試')
~~~
>[danger] ##### Null 和 Undefined
~~~
1.如果開啟嚴格模式不能吧其他模式的值設置為null 和 undfined
2.與 void 的區別是,undefined 和 null 是所有類型的子類型。也就是說
undefined 類型的變量,可以賦值給 number 類型的變量
舉個例子: let num: number = undefined,如果你在tsconfig.json 開啟了嚴格模式'strict'那這樣會報錯
~~~
~~~
let u: undefined
u = undefined // 只能是undefined類型
let n: null
n = null // 只能是null 類型
~~~
>[danger] ##### 不存在的類型 -- never
~~~
1.永遠不存在值的類型,一般用于錯誤處理函數.例如'拋出異常'/'死循環'
~~~
~~~
// never 類型 不存在的類型
const errorFunc = (message: string): never => {
throw new Error(message)
}
// 死循環
const infiniteFunc = (): never => {
while(true){}
}
// 任意類型都可以賦值 never 但是never 不能賦值任意類型
// 立即執行函 類型是never 下面是
let test:number
const infiniteFunc2 = ((): never => {
while(true){}
})()
test = infiniteFunc2 // 其他 類型可以賦值never類型
// infiniteFunc2 = test never類型不可以賦值其他類型
~~~
>[danger] ##### 對象 -- object
~~~
1.object 類型 ts 中是泛指非所有非原始類型
~~~
~~~
// object 類型 ts 中是泛指非所有非原始類型
// 也就是數組 函數 對象
let a:object = []
a= function(){}
a = {}
~~~
>[danger] ##### 想明確定義一個對象
~~~
1.可以使用接口 或者字面量的語法方式這里舉個例子后面會深入
const b:{name:string} = {name:'w'}
~~~
>[danger] ##### 類型斷言
~~~
1.兩種寫法:'<類型>值' 或者 '值 as 類型'
2.當我們使用一些聯合類型的時候,不同的聯合類型是具有不同屬性,例如
數字就不存在字符串長度的方法,但是為了區分聯合類型傳遞的參數去做不
一樣方法,就需要使用到類型斷言
3.它沒有運行時的影響,只是在編譯階段起作用。 TypeScript會假設你,程序員,已經進行了必須的檢查。
4.下面函數中的應用如果是js的話傳入的數字,數字.length 會對應'undefined'
代碼不會出現問題的,但因為ts 強類型,他會去查你類型中是否有這個方法
讓你通過斷言去做不同的操作
5.簡單的說因為ts給我們做了強制的判斷,因此我們也要對指定的聯合參數
斷言告訴他使用那個
~~~
* 兩種寫法
~~~js
// 尖括號寫法
let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;
// as 的寫法
let someValue1: any = "this is a string";
let strLength1: number = (someValue1 as string).length;
~~~
* 函數中的應用
~~~
function getLength(something: string | number): number {
if ((<string>something).length) {
return (<string>something).length;
} else {
console.log(2)
return something.toString().length;
}
}
console.log(getLength(1))
~~~
- Vue--基礎篇章
- Vue -- 介紹
- Vue -- MVVM
- Vue -- 創建Vue實例
- Vue -- 模板語法
- Vue -- 指令用法
- v-cloak -- 遮蓋
- v-bind -- 標簽屬性動態綁定
- v-on -- 綁定事件
- v-model -- 雙向數據綁定
- v-for -- 只是循環沒那么簡單
- 小知識點 -- 計劃內屬性
- key -- 屬性為什么要加
- 案例說明
- v-if/v-show -- 顯示隱藏
- v-for 和 v-if 同時使用
- v-pre -- 不渲染大大胡語法
- v-once -- 只渲染一次
- Vue -- class和style綁定
- Vue -- filter 過濾器
- Vue--watch/computed/fun
- watch -- 巧妙利用watch思想
- Vue -- 自定義指令
- Vue -- $方法
- Vue--生命周期
- Vue -- 專屬ajax
- Vue -- transition過渡動畫
- 前面章節的案例
- 案例 -- 跑馬燈效果
- 案例 -- 選項卡內容切換
- 案例-- 篩選商品
- 案例 -- 搜索/刪除/更改
- 案例 -- 用computed做多選
- 案例 -- checked 多選
- Vue--組件篇章
- component -- 介紹
- component -- 使用全局組件
- component -- 使用局部組件
- component -- 組件深入
- component -- 組件傳值父傳子
- component -- 組件傳值子傳父
- component -- 子傳父語法糖拆解
- component -- 父組件操作子組件
- component -- is 動態切換組件
- component -- 用v-if/v-show控制子組件
- component -- 組件切換的動畫效果
- component -- slot 插槽
- component -- 插槽2.6
- component -- 組件的生命周期
- component -- 基礎組件全局注冊
- VueRouter--獲取路由參數
- VueRouter -- 介紹路由
- VueRouter -- 安裝
- VueRouter -- 使用
- VueRouter--router-link簡單參數
- VueRouter--router-link樣式問題
- VueRouter--router-view動畫效果
- VueRouter -- 匹配優先級
- vueRouter -- 動態路由
- VueRouter -- 命名路由
- VueRouter -- 命名視圖
- VueRouter--$router 獲取函數
- VueRouter--$route獲取參數
- VueRouter--路由嵌套
- VueRouter -- 導航守衛
- VueRouter -- 寫在最后
- Vue--模塊化方式結構
- webpack--自定義配置
- webpack -- 自定義Vue操作
- VueCli -- 3.0可視化配置
- VueCli -- 3.0 項目目錄
- Vue -- 組件升級篇
- Vue -- 組件種類與組件組成
- Vue -- 組件prop、event、slot 技巧
- Vue -- 組件通信(一)
- Vue -- 組件通信(二)
- Vue -- 組件通信(三)
- Vue -- 組件通信(四)
- Vue -- 組件通信(五)
- Vue -- 組件通信(六)
- Vue -- bus非父子組件通信
- Vue -- 封裝js插件成vue組件
- vue組件分裝 -- 進階篇
- Vue -- 組件封裝splitpane(分割面板)
- UI -- 正式封裝
- Vue -- iview 可編輯表格案例
- Ui -- iview 可以同時編輯多行
- Vue -- 了解遞歸組件
- UI -- 正式使用遞歸菜單
- Vue -- iview Tree組件
- Vue -- 利用通信仿寫一個form驗證
- Vue -- 使用自己的Form
- Vue -- Checkbox 組件
- Vue -- CheckboxGroup.vue
- Vue -- Alert 組件
- Vue -- 手動掛載組件
- Vue -- Alert開始封裝
- Vue -- 動態表單組件
- Vue -- Vuex組件的狀態管理
- Vuex -- 參數使用理解
- Vuex -- state擴展
- Vuex -- getters擴展
- Vuex--mutations擴展
- Vuex -- Action 異步
- Vuex -- plugins插件
- Vuex -- v-model寫法
- Vuex -- 更多
- VueCli -- 技巧總結篇
- CLI -- 路由基礎
- CLI -- 路由升級篇
- CLI --異步axios
- axios -- 封裝axios
- CLI -- 登錄寫法
- CLI -- 權限
- CLI -- 簡單權限
- CLI -- 動態路由加載
- CLI -- 數據性能優化
- ES6 -- 類的概念
- ES6類 -- 基礎
- ES6 -- 繼承
- ES6 -- 工作實戰用類數據管理
- JS -- 適配器模式
- ES7 -- 裝飾器(Decorator)
- 裝飾器 -- 裝飾器修飾類
- 裝飾器--修飾類方法(知識擴展)
- 裝飾器 -- 裝飾器修飾類中的方法
- 裝飾器 -- 執行順序
- Reflect -- es6 自帶版本
- Reflect -- reflect-metadata 版本
- 實戰 -- 驗證篇章(基礎)
- 驗證篇章 -- 搭建和目錄
- 驗證篇章 -- 創建基本模板
- 驗證篇章 -- 使用
- 實戰 -- 更新模型(為了迎合ui升級)
- 實戰 -- 模型與接口對接
- TypeSprict -- 基礎篇章
- TS-- 搭建(一)webpack版本
- TS -- 搭建(二)直接使用
- TS -- 基礎類型
- TS -- 枚舉類型
- TS -- Symbol
- TS -- interface 接口
- TS -- 函數
- TS -- 泛型
- TS -- 類
- TS -- 類型推論和兼容
- TS -- 高級類型(一)
- TS -- 高級類型(二)
- TS -- 關于模塊解析
- TS -- 聲明合并
- TS -- 混入
- Vue -- TS項目模擬
- TS -- vue和以前代碼對比
- TS -- vue簡單案例上手
- Vue -- 簡單弄懂VueRouter過程
- VueRouter -- 實現簡單Router
- Vue-- 原理2.x源碼簡單理解
- 了解 -- 簡單的響應式工作原理
- 準備工作 -- 了解發布訂閱和觀察者模式
- 了解 -- 響應式工作原理(一)
- 了解 -- 響應式工作原理(二)
- 手寫 -- 簡單的vue數據響應(一)
- 手寫 -- 簡單的vue數據響應(二)
- 模板引擎可以做的
- 了解 -- 虛擬DOM
- 虛擬dom -- 使用Snabbdom
- 閱讀 -- Snabbdom
- 分析snabbdom源碼 -- h函數
- 分析snabbdom -- init 方法
- init 方法 -- patch方法分析(一)
- init 方法 -- patch方法分析(二)
- init方法 -- patch方法分析(三)
- 手寫 -- 簡單的虛擬dom渲染
- 函數表達解析 - h 和 create-element
- dom操作 -- patch.js
- Vue -- 完成一個minVue
- minVue -- 打包入口
- Vue -- new實例做了什么
- Vue -- $mount 模板編譯階段
- 模板編譯 -- 分析入口
- 模板編譯 -- 分析模板轉譯
- Vue -- mountComponent 掛載階段
- 掛載階段 -- vm._render()
- 掛載階段 -- vnode
- 備份章節
- Vue -- Nuxt.js
- Vue3 -- 學習
- Vue3.x --基本功能快速預覽
- Vue3.x -- createApp
- Vue3.x -- 生命周期
- Vue3.x -- 組件
- vue3.x -- 異步組件???
- vue3.x -- Teleport???
- vue3.x -- 動畫章節 ??
- vue3.x -- 自定義指令 ???
- 深入響應性原理 ???
- vue3.x -- Option API VS Composition API
- Vue3.x -- 使用set up
- Vue3.x -- 響應性API
- 其他 Api 使用
- 計算屬性和監聽屬性
- 生命周期
- 小的案例(一)
- 小的案例(二)-- 泛型
- Vue2.x => Vue3.x 導讀
- v-for 中的 Ref 數組 -- 非兼容
- 異步組件
- attribute 強制行為 -- 非兼容
- $attrs 包括 class & style -- 非兼容
- $children -- 移除
- 自定義指令 -- 非兼容
- 自定義元素交互 -- 非兼容
- Data選項 -- 非兼容
- emits Option -- 新增
- 事件 API -- 非兼容
- 過濾器 -- 移除
- 片段 -- 新增
- 函數式組件 -- 非兼容
- 全局 API -- 非兼容
- 全局 API Treeshaking -- 非兼容
- 內聯模板 Attribute -- 非兼容
- key attribute -- 非兼容
- 按鍵修飾符 -- 非兼容
- 移除 $listeners 和 v-on.native -- 非兼容
- 在 prop 的默認函數中訪問 this -- ??
- 組件使用 v-model -- 非兼容
- 渲染函數 API -- ??
- Slot 統一 ??
- 過渡的 class 名更改 ???
- Transition Group 根元素 -- ??
- v-if 與 v-for 的優先級對比 -- 非兼容
- v-bind 合并行為 非兼容
- 監聽數組 -- 非兼容