2 基础(下) – TS系列教程

函数的类型

函数声明

function sum(x: number, y: number): number {
    return x + y;
}
sum(1, 2, 3); // 报错:输入多余的(或者少于要求的)参数,是不被允许的:

 

函数表达式

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

 

使用接口定义函数

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;
}
}

 

使用…来获取剩余参数

function push(array: any[], ...items: any[]) {
items.forEach(function(item) {
array.push(item);
});
}

 

重载

重载允许一个函数接受不同数量或类型的参数时,作出不同的处理。

function reverse(x: number): number;
function reverse(x: string): string;

function reverse(x: number | string): number | string | void {
if (typeof x === 'number') {
return Number(x.toString().split('').reverse().join(''));
} else if (typeof x === 'string') {
return x.split('').reverse().join('');
}
}

 

类型断言

类型断言(Type Assertion)可以用来手动指定一个值的类型。
值 as 类型

将一个父类断言为更加具体的子类

class ApiError extends Error {
code: number = 0;
}
class HttpError extends Error {
statusCode: number = 200;
}

function isApiError(error: Error) {
if (typeof (error as ApiError).code === 'number') { //有点类似error instanceof ApiError
return true;
}
return false;
}

 

声明文件

当使用第三方库时,我们需要引用它的声明文件,才能获得对应的代码补全、接口提示等功能。

declare var jQuery: (selector: string) => any; //如果不声明全局变量,直接使用JQuery会报错

jQuery('#foo');

 

通常我们会把声明语句放到一个单独的文件(jQuery.d.ts)中,这就是声明文件3:

// src/jQuery.d.ts
declare var jQuery: (selector: string) => any;

// src/index.ts
jQuery('#foo');

 

使用 @types安装已有的第三方声明文件

npm install @types/jquery --save-dev

 

Node.js 不是内置对象的一部分,如果想用 TypeScript 写 Node.js,则需要引入第三方声明文件:

npm install @types/node --save-dev

 

本站文章如未注明均为原创 | 文章作者:刘晓帆 | 转载请注明来自:前端印象

发表评论

邮箱地址不会被公开。 必填项已用*标注

浏览量:28 次浏览