TypeScript v3.1
boolean(布尔值)
let isDone:boolean=true;
number(数字)
let decimal:number=6;//十进制
let hex:number=0xf00d;//十六进制
let binary:number=0b1010;//二进制
let octal:number=0o744;//八进制
string(字符串)
let color:string="red";
color="bule";
let longName:string=`Mr. Hello`;
let tip:string=`${longName} like ${color}`;
array (数组)
//元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同
let arr:number[]=[1,2,3];//方式一
let arr2:Array<string>=['h','e','l','l','o'];
tuple (元组*)
let x: [string, number];
x = ['hello', 10]; // OK
// x = [10, 'hello']; // Error
// x=['hello',true]//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)类型
enum(枚举*)
//enum类型是对JavaScript标准数据类型的一个补充。 像C#等其它语言一样,使用枚举类型可以为一组数值赋予友好的名字
enum Color {Red,Green,Blue}
let c:Color = Color.Blue
//默认情况下,从0开始为元素编号,也可以手动指定成员的数值
enum Color2 {Red=1,Green,Blue}
let c2:Color2=Color2.Red
//或者全部手动赋值
enum Color3 {Red=1,Green=2,Blue=3}
let c3:Color3 = Color3.Green
//枚举类型提供的一个便利是你可以由枚举的值得到它的名字。 例如,我们知道数值为2,但是不确定它映射到Color里的哪个名字,我们可以查找相应的名字:
enum Color4 {Red=6,Green,Blue}
let ColorName:string=Color4[8]
console.log(ColorName) //Blue
any(任何*)
//不对值进行检查
let notSure:any=4
notSure = "haha"
notSure = false
let notSure2:any=4
// notSure2.ifItExists(); // okay,ifItExists可能在运行时存在
notSure2.toFixed(); // okay, toFixed存在(但编译器不检查)
//与Object不同,Object类型的变量只是允许你给它赋任意值 - 但是却不能够在它上面调用任意的方
let prettySure: Object = 4;
// prettySure.toFixed(); // Error: Property 'toFixed' doesn't exist on type 'Object'.
//当只知道一部分数据的类型时,any可以使一个数组包含不同类型的数据
let list:any[] = [1,true,"hello"]
list[1]=99
void(*)
//void可以说是与any相反,它表示没有任何类型,当函数没有返回值时,返回类型常是void
function warnUser():void{
console.log("error")
}
null和undefined
let u:undefined = undefined
let n:null = null
//默认情况下,undefined和null是所有类型的子类型,但是如果指定了 --strictNullChecks标记,null和undefined字符赋值给void和它们各自
never(*)
//never表示永不存在的值的类型,例如, never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型; 变量也可能是 never类型,当它们被永不为真的类型保护所约束时。
//never类型是任何类型的子类型,也可以赋值给任何类型,除了never本身,没有任何子类型可以赋值给never,any也不行
// 返回never的函数必须存在无法达到的终点
function error(message:string):never{
throw new Error(message)
}
// 推断的返回值类型为never
function fail(){
return error('ooooo')
}
// 返回never的函数必须存在无法达到的终点
function infiniteLoop():never{
while(true){
}
}
object
//Object 指非原始类型,是除了number,string,boolean,symbol,null,undefined之外的类型
//使用object类型,可以更好地表示像Object.create这样的api,eg:
declare function create(o:object|null):void; //create声明在index.html中
create({prop:0}) //OK
create(null)//OK
// create(323)//Error
// create("string"); // Error
// create(false); // Error
// create(undefined); // Error ???
type assertions(类型断言*)
// 有点像java的类型强转
let someValue:any="this is string"
let strLength:number=(<string>someValue).length
//另外一种用as语法的
let someValue2:any = "i am string"
let strLength2:number = (someValue as string).length
网友评论