TypeScript 函数类型
函数是 TypeScript 的核心类型,下面梳理参数与返回值的类型标注方式。
参数类型
TypeScript
function greet(name: string, age: number): string {
return `Hello ${name}, you are ${age} years old.`;
}
// 箭头函数
const add = (a: number, b: number): number => a + b;
可选参数
使用 ? 标记可选:
TypeScript
function buildUrl(host: string, port?: number): string {
if (port) {
return `http://${host}:${port}`;
}
return `http://${host}`;
}
buildUrl("localhost"); // ✅
buildUrl("localhost", 8080); // ✅
注意:可选参数必须在必选参数之后。
默认参数
TypeScript
function createConnection(host: string, port: number = 80): string {
return `${host}:${port}`;
}
createConnection("localhost"); // port 默认为 80
剩余参数
TypeScript
function sum(...numbers: number[]): number {
return numbers.reduce((acc, n) => acc + n, 0);
}
sum(1, 2, 3); // 6
返回值类型
显式标注
TypeScript
function parseJSON(str: string): object {
return JSON.parse(str);
}
void 返回
TypeScript
function log(msg: string): void {
console.log(msg);
}
never 返回
TypeScript
function throwError(msg: string): never {
throw new Error(msg);
}
function loop(): never {
while (true) {}
}
函数类型表达式
TypeScript
type MathFn = (a: number, b: number) => number;
const multiply: MathFn = (a, b) => a * b;
const divide: MathFn = (a, b) => a / b;
函数重载
同一函数名,不同参数签名:
TypeScript
function format(value: string): string;
function format(value: number, decimals: number): string;
function format(value: string | number, decimals: number = 2): string {
if (typeof value === "string") {
return value.trim();
}
return value.toFixed(decimals);
}
format(" hello "); // "hello"
format(3.14159); // "3.14"
format(3.14159, 3); // "3.142"
注意:重载签名必须具体,实现签名必须兼容所有重载签名。
回调函数类型
TypeScript
function fetchData(url: string, callback: (error: Error | null, data?: string) => void): void {
// 模拟异步
callback(null, "data");
}
fetchData("/api", (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(data);
});
要点总结
- 参数类型直接标注,可选参数用
?,默认参数用= - 返回值类型可省略让编译器推断,但复杂函数建议显式标注
void表示无返回值,never表示永不返回(异常/死循环)- 函数重载需先声明签名再写实现,实现签名必须兼容所有重载
- 回调函数参数需标注参数类型与返回值类型
📝 发现内容有误?点击此处直接编辑