从0开始TS-03 Function详解

582 阅读3分钟

「这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战」。

More on Functions

上节回顾--从0开始TS-02 基本语法

更多关于Functions的资料

Function Type Expressions(函数类型表达式)

为方法参数定义类型为函数类型

image.png

我们也可以使用别名定义函数类型

image.png

Call Signatures (调用签名)

js中的函数除了可以调用之外,还可以具有属性。调用签名方案就是为此设计。

image.png

调用签名与函数类型不太一样,由 => 换成了 :

Construct Signatures (构造签名)

如果你要标记构造函数的类型,可以使用构造签名来创建。

image.png

Generic Functions 通用函数

通常我们需要编写一个输入类型与输出类型相关的一个函数,

在ts中,泛型用于描述两个值之间的对应关系。我们通过在函数签名中声明一个类型参数来实现:

image.png

我们可以在使用的时候直接调用,代码如下

const s = firstElement([1,2,3]);
// 此处类型出现了

我们也可以使用,多个类型参数,代码如下

image.png

Constraints (约束)

我们上面编写的通用函数可以处理任何类型的值,但有时候我们希望关联两个值,但是只能对某个值的子集进行操作。在这种情况下,我们可以使用约束来限制类型参数可以接受的类型种类。

image.png

处理约束需要传入符合约定的方法,否则会出现如下错误

image.png

Specifying Type Arguments(指定类型参数)

image.png

Guidelines for Writing Good Generic Functions(编写良好的通用型指南)

  • Push Type Parameters Down(下推类型参数)

如果可能的话,使用类型参数本身而不是约束它

  • Use Fewer Type Paramenters (使用更少的类型参数)

总是尽可能少的使用类型参数

  • Type Parameters Should Appear Twice(类型参数应该出现两次)

如果一个类型参数只出现在一个位置,请强烈重新考虑实际是否需要他

Optional Paramenters 可选参数

image.png

ts中的所有可选参数都可以使用?的方式标记

Function Overloads(函数重载)

可以同时实现一个具有兼容签名的函数实现

image.png

Overload Signatures and the Implementation Signature(重载签名和实现签名)

重载签名即定义的签名,实现签名即上面方法第三行实现的签名,实现签名必须与重载签名兼容。

Writing Good OverLoads(写好的重载)

与泛型一样,在使用重载的时候也应该遵循一些准则。遵守这些原则将使您的函数更容易调用、更容易理解和更容易实现。

  • 如果可能的话,总是倾向于使用联合类型的参数,而不是重载。

Other Types to Know About(其他需要了解的类型)

void

  • Void is not the same as undefined

object

  • object is not Object. Always use object!

unknow

  • 未知类型表示任何值。这和任何类型都类似,但是更安全,因为使用未知值是不合法的。

never

  • 有些函数从不返回值

Function

  • 全局function 描述了类似bind、call、apply等属性,这些属性出现在Javascript的所有函数值上。他还有一个特殊属性,即Function 类型的值总是可以被调用。

Rest Paramenters and Arguments rest(形参和实参)

image.png

Assignability of Functions(函数的可转让性)

Return Type void

返回值为void会返回一些不寻常但是预期的行为,带有void的返回类型可以让返回任何类型的上下文报错。

下节--从0开始TS-04 对象类型

--- END ---