在TypeScript中使用重载或可选参数有什么区别吗?

时间:2013-12-06 20:07:27

标签: typescript

我想知道以下代码块是否有任何区别?第一个创建readText函数的2个定义。我会用第二种方式编写它,带有一个可选参数。

readText(fileName: string, def: string): WinJS.Promise;
readText(fileName: string): WinJS.Promise;

readText(fileName: string, def?: string): WinJS.Promise;

有没有理由不使用可选参数?

1 个答案:

答案 0 :(得分:4)

从类型兼容性的角度来看,这些在实践中难以区分。

但是,第二个版本略好一些,因为只有具有单个重载的函数才能应用上下文类型。例如:

interface Read1 {
    readText(fileName: string, def: string): any;
    readText(fileName: string): any;
}
// No contextual type applied because readText has multiple signatures
// 's' of type 'any', no error raised
var x: Read1 = { readText: (s) => s.subtring(s) };

interface Read2 {
    readText(fileName: string, def?: string): any;
}
// Contextual type applied
// 's' of type 'string', error identified
var y: Read2 = { readText: (s) => s.subtring(s) };