一、TypeScript
1.基础知识
(类型安全角度)强弱类型:强类型不允许随意的隐式类型转换,而弱类型允许。
(类型检查角度)静态类型和动态类型:静态类型在声明时已明确且类型不可再修改,动态类型在运行阶段才可确定,且可随意改变
var a = 100;
a = 'foo'
console.log(a) //a的类型在运行时才可确定且可以修改
Flow
- 类型注解
为变量、返回值、参数定义相关的类型
let num: number = NAN //指定变量类型,可以存放NAN以及Infinity表示无穷大
let n: null = null //存放null 只能用null类型
let q: void = undefined //存放undefined使用void
let arr: Array<number> = [1,2,3] //存放数组以及指定数组中元素的类型
//或者使用 let arr2: number[] = [1,2,3]
// let arr3: [number,string] = [100, 'foo'] //数组中只能两个元素且元素类型于定义时类型顺序一致
const obj1:{
foo: string, bar: number}={
foo: 'a', bar:11}//指定对象中的数据类型只能有foo和bar这两个成员
const obj2:{
foo?: string, bar: number} = {
bar:11} //在成员之后添加?表示可没有该成员
const obj3:{
[string]:string} = {
} //表示对象的键和值都是string类型
function square(n:number){
//指定传入参数的类型
return n*n
}
function foo():void{
} //指定返回值类型
- 函数作为回调函数传入时也可以限制类型
function foo(callback:(string,number) => void ){
//传入的回调函数参数分别是string和number,返回值是空
callback('string',100)
}
- 使用字面量类型限制
const a: 'foo' = 'foo' //限制变量a只能是foo
const type: 'success' | 'warning' | 'danger' = 'success' //限制只能是规定的之一
const s = number | string = 100
- 可以使用type关键词定义一个类型
type StringOrNumber = string | number //定义的类型可以在多处使用
const str:StringOrNumber = '100'
- 使用maybe类型
const b: ?number = undefined
//等同于 const b: number| undefined | void = undefined
- mixed 类型
可以接受任意类型
function passMixed