TypeScript

1.类型推论

let myFavoriteNumber = 'seven';
myFavoriteNumber = 7;
// index.ts(2,1): error TS2322: Type 'number' is not assignable to type 'string'.

上述代码虽然没有指定类型,但是会在编译的时候报错

如果定义的时候没有赋值,不管之后有没有赋值,都会被推断成any类型而不被类型所检查到

2.联合类型

表示取值可以为多种类型中的一种。

let my: string|number

联合类型的变量在被赋值的时候,会根据类型推论的规则推断出一个类型

3.对象的类型--接口

接口:是对行为的抽象,具体如何行动需要由类(class)去实现(implement)

TypeScript中的接口是一个非常灵活的概念,除了可以用于对类的一部分进行抽象意外,常用于对对象的形状进行描述

例子:

interface Person{
   name:string;
   age:number;
}
let tom:Person={
   name:'Tom',
   age:25
}

通过接口去实现,定义的变量比接口少一些属性是不允许的,多一些属性也是不允许的。

可选属性

在属性后面加上?

interface Person {
    name: string;
    age?: number;
}

let tom: Person = {
    name: 'Tom'
};

任意属性

有时候希望接口允许有任意的属性,可以使用如下方式:

interface Person {
    name: string;
    age?: number;
    [propName: string]: any;
}

let tom: Person = {
    name: 'Tom',
    gender: 'male'
};

注意:一旦定义了任意属性(为string),那么确定属性可选属性的类型都必须是它的类型的子集。对于非string类型,不会做限制。

interface Person {
    name: string;
    age?: number;
    [propName: string]: string;
}

let tom: Person = {
    name: 'Tom',
    age: 25,// index.ts(3,5): error TS2411: Property 'age' of type 'number' is not assignable to string index type 'string'.
    gender: 'male'
};

只读属性

有时候希望对象中的一些字段只能在创建的时候被赋值,那么可以用readonly定义只读属性。

interface Person {
    readonly id: number;
    name: string;
    age?: number;
    [propName: string]: any;
}

let tom: Person = {
    id: 89757,
    name: 'Tom',
    gender: 'male'
};

tom.id = 9527;

// index.ts(14,5): error TS2540: Cannot assign to 'id' because it is a constant or a read-only property.

4.数组的类型

在TypeScript中,数组类型有多种定义方式:

[类型+方括号]表示法

let fibonacci: number[] = [1, 1, 2, 3, 5];

let fibonacci: number[] = [1, '1', 2, 3, 5];// Type 'string' is not assignable to type 'number'.

数组的项中不允许出现其他的类型。

数组泛型

let fibonacci: Array<number> = [1, 1, 2, 3, 5];

用接口表示数组

interface NumberArray {
    [index: number]: number;
}
let fibonacci: NumberArray = [1, 1, 2, 3, 5];

5.函数的类型

js中有两种常见的定义函数的方式——函数声明和函数表达式

// 函数声明(Function Declaration)
function sum(x, y) {
    return x + y;
}

// 函数表达式(Function Expression)
let mySum = function (x, y) {
    return x + y;
};

函数声明

一个函数有输入和输出时,要在TypeScript中对其进行约束,需要把输入和输出都考虑进去,其中函数声明的类型定义较为简单:

function sum(x:number,y:number):number{
    return x+y
}

注意:输入多余或者少于要求的参数,是不被允许的

函数表达

如果我们现在写一个对函数表达式的定义,可能会写完

let mySum = function (x: number, y: number): number {
    return x + y;
};

上面是错误的写法。因为只对等号右边的匿名函数进行了类型定义,而等号左边的mySum是通过赋值操作进行推断的。

正确的写法:

let mySum:(x:number,y:number)=>number=function(x:number,y:number):number{
    return x+y
}

不要混淆TypeScript中的=>和ES6中的=>

在TypeScript的类型定义中,=>用来表示函数的定义,左边是输入类型,需要用括号括起来,右边是输出类型

用接口定义函数的形状

interface SearchFunc{
  (source:string,subString:string):boolean;  
}
let mySearch:SearchFunc;
mySearch=function(source:string,subString:string){
   return source.search(subString) !==-1;
}

可选参数

和接口中的可选属性类似,用?表示可选的参数:

function buildName(firstName:string,lastName?:string){
    if(lastName){
        return firstName+' '+lastName;
    }else{
        return firstName;
    }
}
let tom=buildName('Tom')

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值