# 函数
## 函数类型表达式
```ts
function greeter(fn: (a: string) => void) {
fn("Hello, World");
}
function printToConsole(s: string) {
console.log(s);
}
greeter(printToConsole);
```
语法 `(a: string) => void` 表示一个函数有一个名为 `a` ,类型是字符串的参数,这个函数并没有返回任何值。
如果一个函数参数的类型并没有明确给出,它会被隐式设置为 `any`。
>注意函数参数的名字是必须的,这种函数类型描述 `(string) => void`,表示的其实是一个函数有一个类型是 `any`,名为 `string` 的参数。
当然了,我们也可以使用类型别名(type alias)定义一个函数类型:
```ts
type GreetFunction = (a: string) => void;
function greeter(fn: GreetFunction) {
// ...
}
```
## 调用签名
在JavaScript中,函数除了可以被调用,自己也是可以有属性值的。函数类型表达式并不能支持声明属性,如果我们想描述一个带有属性的函数,我们可以在一个对象类型中写一个调用签名。
```t