javascript - Typescript:為什麼沒有參數的函數可以被轉換成有參數的函數
為什麼這段程式碼沒有任何編譯錯誤?程式碼:
function partial(f: (a: string) => string, a: string) : string {
return "";
}
var test = () => "";
var result = partial(test, "");
函數 "partial" 將一個函數作為第一個參數,該函數接受一個參數,但我傳給它一個不接受任何參數的函數,而 TypeScript 編譯器認為這沒問題。我理解這不會造成任何問題,因為你可以將所有的參數傳給一個不接受任何參數的函數,它也不會出錯,但這應該是一個編譯錯誤,因為 TypeScript 關注的是類型,而且這裡明顯存在類型不匹配,可能是開發者的錯誤。
對這個問題有任何解決方法嗎?
答案#1
明顯存在類型不匹配,這可能是開發者的錯誤。
這段程式碼看起來沒有明顯的問題。可以考慮像這樣的內容:
let items = [1, 2, 3];
// Print each item in the array
items.forEach(item => console.log(item));
這段程式碼正確嗎?絕對正確!但是 forEach 會以 三個參數呼叫其提供的函式,而不是一個。必須寫成下面這樣會很繁瑣:
items.forEach((item, unused1, unused2) => console.log(item));
請注意,如果你嘗試做一些實際上錯誤的事情,你仍然可能會遇到錯誤。例如:
function printNumber(x: number) { console.log(x); }
let strings = ['hello', 'world'];
strings.forEach(printNumber); // Error, can't convert string to number
