
javascript
1.相关概念
- 静态类型:一个变量在声明时类型就是明确的,声明之后就不允许再修改
- 动态类型:在运行阶段才能够明确变量的类型,变量的类型可以随时变化
- 强类型:不允许任意的数据隐式类型转换
- 弱类型:允许任意的数据隐式类型转换
2.强类型语言优点
- 错误更早暴露
- 代码更智能,编码更准确(IDE提示更准确)
- 重构更牢靠
- 减少不必要的类型判断
Flow
- javascript类型检查器,是一个小工具
- 类型注解
function sum (a: number, b: number) {
return a + b
}
sum(100, 100)
sum('100', '100')
function square (n) {
return n * n
}
square('100')
function foo (): number {
return 100
}
function bar (): void {
}
const a: string = 'foobar'
const b: number = Infinity
const c: boolean = false
const d: null = null
const e: void = undefined
const f: symbol = Symbol()
const arr1: Array<number> = [1, 2, 3]
const arr2: number[] = [1, 2, 3]
const foo: [string, number] = ['foo', 100]
const obj1: { foo: string, bar: number } = { foo: 'string', bar: 100 }
const obj2: { foo?: string, bar: number } = { bar: 100 }
const obj3: { [string]: string } = {}
obj3.key1 = 'value1'
obj3.key2 = 'value2'
function foo (callback: (string, number) => void) {
callback('string', 100)
}
foo(function (str, n) {
})
const a: 'foo' = 'foo'
const type: 'success' | 'warning' | 'danger' = 'success'
type StringOrNumber = string | number
const b: StringOrNumber = 'string'
const gender: ?number = undefined
function passMixed (value: mixed) {
if (typeof value === 'string') {
value.substr(1)
}
if (typeof value === 'number') {
value * value
}
}
passMixed('string')
passMixed(100)
/ any 弱类型,兼容老的项目
function passAny (value: any) {
value.substr(1)
value * value
}
passAny('string')
passAny(100)