正如大家所说,typescipt 是 javascript 的超集,因此您的代码是有效的 typescript,但以下是如何使用箭头函数(这也是es6
javascript)和类型:
(function theLoop (i: number) {
setTimeout(() => {
metronome.play();
if (--i) {
theLoop(i);
}
}, 3000);
})(10);
(操场上的代码 https://www.typescriptlang.org/play/#src=(function%20theLoop%20(i%3A%20number)%20%7B%0A%20%20%20%20%20%20%20%20setTimeout(()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20metronome.play()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(--i)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20theLoop(i)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%2C%203000)%3B%0A%20%20%20%20%7D)(10)%3B)
这是另一种变体:
let theLoop: (i: number) => void = (i: number) => {
setTimeout(() => {
metronome.play();
if (--i) {
theLoop(i);
}
}, 3000);
};
theLoop(10);
(操场上的代码 https://www.typescriptlang.org/play/#src=let%20theLoop%3A%20(i%3A%20number)%20%3D%3E%20void%20%3D%20(i%3A%20number)%20%3D%3E%20%7B%0A%20%20%20%20setTimeout(()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20metronome.play()%3B%0A%20%20%20%20%20%20%20%20if%20(--i)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20theLoop(i)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%2C%203000)%3B%0A%7D%3B%0A%0AtheLoop(10)%3B)
Edit
使用我给您的第二个选项,更改延迟很容易:
let theLoop: (i: number, delay?) => void = (i: number, delay = 3000) => {
if (i % 2 === 0) {
delay = 1500;
}
setTimeout(() => {
metronome.play();
if (--i) {
theLoop(i);
}
}, delay);
};
theLoop(10);
(操场上的代码 https://www.typescriptlang.org/play/#src=let%20theLoop%3A%20(i%3A%20number%2C%20delay%3F)%20%3D%3E%20void%20%3D%20(i%3A%20number%2C%20delay%20%3D%203000)%20%3D%3E%20%7B%0A%20%20%20%20if%20(i%20%25%202%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20delay%20%3D%201500%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setTimeout(()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20metronome.play()%3B%0A%20%20%20%20%20%20%20%20if%20(--i)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20theLoop(i)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%2C%20delay)%3B%0A%7D%3B%0A%0AtheLoop(10)%3B)