原始类型
js有五种基本类型 string、number、boolean、null、undefined,这几种类型typescript都赋予了对应的类型限定,如下
1、布尔值
let bool: boolean = false
注意利用Boolean创造的对象不是布尔值:
let boolObject: boolean = new Boolean(1) //会报错
new Boolean创造的是一个对象并不是布尔值,
直接调用Boolean倒是可以
2、字符串
str: string = 'hellow'
// 模板字符串
let sentence: string = `Hello, my name is ${myName}.
I'll be ${myAge + 1} years old next month.`;
编译结果:
var myName = 'Tom';
var myAge = 25;
// 模板字符串
var sentence = "Hello, my name is " + myName + ".\nI'll be " + (myAge + 1) + " years old next month."; ```
4、数值
let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;
// ES6 中的二进制表示法
let binaryLiteral: number = 0b1010;
// ES6 中的八进制表示法
let octalLiteral: number = 0o744;
let notANumber: number = NaN;
let infinityNumber: number = Infinity;
编译结果:
var decLiteral = 6;
var hexLiteral = 0xf00d;
// ES6 中的二进制表示法
var binaryLiteral = 10;
// ES6 中的八进制表示法
var octalLiteral = 484;
var notANumber = NaN;
var infinityNumber = Infinity;
其中 0b1010
和 0o744
是 ES6 中的二进制和八进制表示法,它们会被编译为十进制数字
4、null和undefined
null和undefined在typescript中分别是两个独立的类型限定
let u: undefined = undefined;
let n: null = null;
5、空值void
void限定的变量只能赋值null或者undefined:
let noContent: void = null;
与null和undefined限定不同的是,null和undefined是所有类型的子类型:
let num: number = undefined; //这样没有问题
// 这样也不会报错
let u: undefined;
let num: number = u;
而void类型的变量不能互相随意传递:
let noContent: void;
let num: number = noContent; // 报错
任意类型 (any)
被指定为任意类型的变量可以被赋值任何类型,也能被调用任何属性方法,都不会报错:
let myFavoriteNumber: string = 'seven';
myFavoriteNumber = 7;
let anyThing: any = 'Tom';
anyThing.setName('Jerry');
anyThing.setName('Jerry').sayHello();
anyThing.myName.setFirstName('Cat');
注意:没有指定类型的变量,默认就是any类型
。
类型推论
当变量被赋值的时候没有被指定类型限定,会根据变量类型默认设置类型限定:
let myFavoriteNumber = 'seven';
myFavoriteNumber = 7;
// 等价于下边
let myFavoriteNumber: string = 'seven';
myFavoriteNumber = 7;
联合类型
表示取值为多种类型中的一个
let myFavoriteNumber: string | number;
myFavoriteNumber = 'seven';
myFavoriteNumber = 7;
// 只能赋值string或者number
myFavoriteNumber = true // 会报错
访问联合类型的属性和方法
联合类型的变量只能访问类型共有的属性和方法
function getLength(something: string | number): number {
return something.length; // 会报错,字符串不含有length属性
//想解决报错可以使用类型断言
return <string>something.length // 这样就不会报错
}
// 联合类型当赋值为一个类型会推断赋值为那个类型
myFavoriteNumber = 'ss' // 变量被设定为字符串
myFavoriteNumber.slice(0) // ok
myFavoriteNumber = 5 // 变量被推断为number类型
myFavoriteNumber.slice(0) // 会报错
未完待续...
参考博客:https://www.jianshu.com/p/ced644f45764