typescript的类型限制
布尔值
let isDone: boolean = false;
数字
和JavaScript一样,TypeScript里的所有数字都是浮点数。 这些浮点数的类型是 number
。 除了支持十进制和十六进制字面量,TypeScript还支持ECMAScript 2015中引入的二进制和八进制字面量。
let decLiteral: number = 6; let hexLiteral: number = 0xf00d; let binaryLiteral: number = 0b1010; let octalLiteral: number = 0o744;
字符串
JavaScript程序的另一项基本操作是处理网页或服务器端的文本数据。 像其它语言里一样,我们使用 string
表示文本数据类型。 和JavaScript一样,可以使用双引号( "
)或单引号('
)表示字符串。
let name: string = `Gene`; let age: number = 37; let sentence: string = `Hello, my name is ${ name }. I'll be ${ age + 1 } years old next month.`;
数组
TypeScript像JavaScript一样可以操作数组元素。 有两种方式可以定义数组。 第一种,可以在元素类型后面接上 []
,表示由此类型元素组成的一个数组:
let list: number[] = [1, 2, 3];
或者也可以使用数据泛型,Array<元素类型>
:
let list: Array<number> = [1, 2, 3];
元组Tuple
元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。 比如,你可以定义一对值分别为 string
和number
类型的元组。
// Declare a tuple type let x: [string, number]; // Initialize it x = ['hello', 10]; // OK // Initialize it incorrectly x = [10, 'hello']; // Error
当访问一个已知索引的元素,会得到正确的类型:
console.log(x[0].substr(1)); // OK console.log(x[1].substr(1)); // Error, 'number' does not have 'substr'
当访问一个越界的元素,会使用联合类型替代(当访问超出元素数目的索引值时,索引值的类型为联合类型):
x[3] = 'world'; // OK, 字符串可以赋值给(string | number)类型 console.log(x[5].toString()); // OK, 'string' 和 'number' 都有 toString x[6] = true; // Error, 布尔不是(string | number)类型
任意类型Any
在任意值*问任何属性都是允许的:
let anyThing: any = 'hello'; console.log(anyThing.uname); console.log(anyThing.uname.firstName);
也允许调用任何方法:
let anyThing: any = 'hello'; anyThing.setName('muzidigbig'); anyThing.setName('muzidigbig').sayHello(); anyThing.name.setFirstName('Lee');
变量如果在声明的时候,未指定其类型未进行初始赋值,那么它会被识别为任意值类型:
let someThing; // 等价于 let someThing: any; someThing = 'seven'; someThing = 7; someThing.setName('muzidigbig');
未指定其类型进行初始赋值
会根据初始值推断类型
var num = 2; //类型推断为 number console.log(typeof num); num = '12'; //编译错误 //error TS2322: Type '"12"' is not assignable to type 'number'. console.log(typeof num);