基本类型
基本数据类型
ts 支持与 js 几乎相同的数据类型,但是增加对数据类型的限制
let isDone: boolean = false;
let name: string = "chen";
let list: number[] = [1, 2, 3];
let sentence: string = `Hello, my name is ${name}`;
let str = "abc";
str = 123; // 类型不可以转换的错误
元组
新增元组类型来解决一个数组中包含不同类型的情况
let x: [string, number];
x = ['hello', 10];
枚举
新增枚举类型,可以使用枚举类型对一组数组赋予别名
enum Color{Red, Green, Blue}
let c: Color = Color.Green;
默认情况下,枚举类型从0开始元素编号,支持手动指定成员的数值
enum Color{Red = 1, Green, Blue};
let c: Color = Color.Green;
枚举类型支持通过枚举的值来得到对应的名字
enum Color{Red = 1, Green, Blue};
console.log(Color[2]); // Green
Any
不能判断一个变量的具体类型时候,可以使用 Any , 效果将会与 js 中相似,支持不同数据类型之间的赋值
let notSure: any = 4;
notSure = 'maybe a string indeed';
这个类型同样对数组有效
let list: any[] = [1, true, "free"];
list[1] = 100;
Void
void 类型一般用于声明函数没有返回值
function warnUser(): void{
console.log("This is my warning message");
}
声明一个void类型的变量没有什么大用,因为你只能为它赋予 undefined 和 null
let unusable: void = undefined;
null和undefined
和js中的 null 和 undefined 相似,但当在 tsconfig.js 文件中设置 strictNullChecks 为 true 时,就不能将 null 和 undefined 赋值给除它们自身和 void之外的任意类型
never
never 类型表示的是那些永不存在的值的类型,例如抛出异常或者死循环的函数,或者是永不为真的变量,never 类型可以是任何类型的子类型,也可以赋值给任何类型
// 抛出错误的函数
function error(message: string): never{
throw new Error(message);
}
// 死循环的函数
function infiniteLoop(): never{
while(true){
}
}
Object
和 js 中相似
类型断言
可以理解成其他语言中的强转,typescript将不再进行特殊的数据检查和解构,它没有运行时的影响,只是在编译阶段起作用
类型断言有两种形式写法,其一是"尖括号"语法:
let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;
另一个为as语法:
let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;
变量声明
因为typescript是javascript的超集,所以它本身就支持let和const,其中变量声明的方式也和js相似,这里不作进一步说明
接口
typescript的核心原则之一是对值所具有的结构进行类型检查。在typescript里,接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约
接口初探
接口可以用作规范函数中一些必须的参数,如下两个例子,效果是等价的
function printLabel(labelledObj: {label: string}) {
console.log(labelledObj.label);
}
interface LabelledValue {
label: string;
}
function printLabel(labelledObj: LabelledValue) {
console.log(labelledObj.label);
}
可选属性
接口里的属性不全是必需的,带有可选属性的接口与普通的接口定义区别在于在可选属性名字定义的后面加一个?符号
interface SquareConfig{
color?: string;
width?: number;
}
只读属性
一些对象属性只能在对象刚刚创建的时候修改其值,你可以在属性名前用readonly来指定只读属性:
interface Point {
readonly x: number;
readonly y: nu