typescript学习笔记

基本类型

基本数据类型

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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值