在TypeScript中,下面兩個函數都是相同的,但我試圖在demoTwo中明確聲明返回類型。返回類型是一個函數,它本身將函數作爲輸入。我的問題是爲什麼我必須給參數名稱whyThis,因爲它永遠不會被使用?沒有這個位置的東西就不會編譯代碼。TypeScript中lambda返回類型的簽名
function demoOne() {
return function(input:() => string) : void {
var result = input();
console.log("Foo:",result);
}
}
function demoTwo(): (whyThis:() => string) => void {
return function(input:() => string) : void {
var result = input();
console.log("Bar:",result);
}
}
var sampleInput =() => "wibble";
demoOne()(sampleInput);
demoTwo()(sampleInput);
要弄清楚我問這裏是Scala中的等效代碼:
object Program {
def demoTwo(): (() => String) => Unit = {
def tmp(input:() => String): Unit = {
val result = input()
println("Bar: " + result)
}
return tmp
}
def main(args: Array[String]): Unit = {
val sampleInput =() => "wibble"
demoTwo()(sampleInput)
}
}
如果我們並排設置demoTwo方的聲明,我們有:
function demoTwo(): (whyThis:() => string) => void { //TS
def demoTwo(): (() => String) => Unit = { //Scala
唯一的主要區別是TS需要的東西在爲什麼這個位置和Scala沒有。爲什麼會這樣呢?
確實如此。但是我的問題與你的陳述「你是否決定使用它們」有關。在這種情況下,參數** whyThis **永遠不能使用,所以這只是對Typescript規範的忽略,或者是我有沒有看到它的某種目的? –
我已經編輯了一些答案,試圖回答你的問題,讓我知道如果該主題仍不清楚。 – hagner
謝謝。出於某種原因無法看到圖像。另外,我不認爲你對我的要求很清楚。已經添加了希望澄清事情的代碼的Scala版本。 –