静态类型检查
: string/number/boolean/null/undefined
需要注意 不可以用 new 的方式,会编译报错,但可以通过直接运行构造函数的方式
let createdByNewBoolean:Boolean = new Boolean(1); // 报错
let createdByBoolean:Boolean = Boolean(1); // 编译通过
空值 void
没有什么卵用,只能被复制 undefined 或 null
let empty: void = null;
function alertName():void{
alert('My name is Tom');
}
需要注意 undefined 和 null 类型的值可以赋给任意类型的变量,但void 类型的不能赋值给其他类型变量
any
相当于没写声明,用any 还用ts干嘛,哼
let something; // 相当于 let something: any;
注意如果赋初始值了是会按初始值做类型推断的,如下
let count = 123; // 相当于 let count: number = 123;
联合类型
通过用 |
可以将变量声明为多个类型
需要注意的是调用此变量的方法的时候只能调用多个类型都有的方法或属性
function getString(something: string | number): string {
return something.length; // 报错
return something.toString(); // ok
}
未赋初始值得变量会被类型推断
let myFavoriteNumber: string | number;
myFavoriteNumber = 'seven';
console.log(myFavoriteNumber.length); // 5
myFavoriteNumber = 7;
console.log(myFavoriteNumber.length); // 编译时报错
interface: 对象的形状
对象的形状,即声明某些类型对象的规则,对象的形状
interface Person{
readonly id?: number; // ? 表示可选,readonly 表示不可修改且只有对象一开始才能赋值
age: number;
name: string;
[other: number]: number | string; // 允许对象创建时增加其他属性,如果不加这行创建对象则只能严格按照interface 创建
[other: number | string]: number | string; // 会报错,索引声明不能用联合类型
// An index signature parameter type must be 'string' or 'number'.
// [other: number | string]: number | string;
}
let perter: Person = {
age: 16,
name: 'perter',
1: 'male'
}
perter.id = 123; // 会报错
数组的类型
类型 + []
let arr: number[] = [1,2,3, '11'] // 会报错,因为 值得类型不是number[] ,而是 (number | string)[]
arr.push('3') // 同样会报错
数组泛型
let arr: Array<number> ;
用interface
表示数组
interface arr{
[key: number]: string;
}
let stringArr: arr = ['1', '2', '8'];
网友评论