原始数据类型

number

1
2
3
4
5
6
let num: number = 1
let num: number = 0x0a // 16进制
let num: number = 0o12 // 8进制
let num: number = 0b1010 // 2进制
let num: number = NaN
let num: number = Infinity

以上写法都正确,且编译为js后8进制, 2进制将会转化为10进制

boolean

1
2
3
let bol: boolean = true
let bol: boolean = false
let bol: boolean = new Boolean() // 错误

注意,使用构造函数 Boolean 创造不是布尔值而是对象,ts中不能这么用

string

1
2
3
4
5
6
let str: string = 'hello'
let str1: string = `${str} world`

tsc xx.ts // 编译后
var str = 'hello';
var str1 = str + " world";

模板字符串会被转为字符串拼接

null & undefined

1
2
3
4
5
6
let nul: null = null
let und: undefined = undefined

let num: number = undefined // 错误 不能将类型“undefined”分配给“number”
let nul1: null = undefined // 错误
let und1: undefined = null // 错误

在ts的官方文档中,undefined,null是任何类型的子类型,是可以被赋值给其他任何类型,但需要设置!

tsconfig.json中找到并设置为:

1
"strictNullChecks": false

这时候警告就消失了,但是以上的方法尽量不要操作,必须要赋值,我们可以用联合类型(原因我也不晓得,别人说的)

void

1
2
3
4
5
6
function alertName(): void {
alert('My website is mrpzx.cn')
}

let voi: void = undefined
let voi: void = null // 错误

JavaScript 没有空值void的概念,在 TypeScript 中主要用于表示函数无返回值,且undefined与null同上条所说:

undefined,null是任何类型的子类型,是可以被赋值给其他任何类型

也就是说undefined和null也可以赋值给void,但是
undefined可直接赋值给void,而null需要以下的情况下才可

1
"strictNullChecks": false

任意值

Any

任意值(Any)用来表示允许赋值为任意类型。

如果是一个普通类型,在赋值过程中改变类型是不被允许的:

1
2
3
4
let str: string = 'seven'
str = 7

// error TS2322: Type 'number' is not assignable to type 'string'.

但如果是 any 类型,则允许被赋值为任意类型

1
2
let anyType: any = 'seven';
anyType = 7; // 正确

vdfb

在任意值上访问任何属性,调用任何方法 都是允许的:

1
2
3
let anyThing: any = 'hello'
console.log(anyThing.myName)
anyThing.setName('Jerry')

可以认为,声明一个变量为任意值之后,对它的任何操作,返回的内容的类型都是任意值

如果变量如果在声明的时候,未指定其类型,那么它会被识别为任意值类型

1
2
3
4
5
6
7
8
9
let something;
something = 'seven';
something = 7;

// 等价于

let something: any;
something = 'seven';
something = 7;
Typescriptmrpzx