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