我想知道以下代码块是否有任何区别?第一个创建readText函数的2个定义。我会用第二种方式编写它,带有一个可选参数。
readText(fileName: string, def: string): WinJS.Promise;
readText(fileName: string): WinJS.Promise;
和
readText(fileName: string, def?: string): WinJS.Promise;
有没有理由不使用可选参数?
答案 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) };