我今天在這個相同的問題上掙扎了很長時間,但我明白了。
假設你正在使用@類型/ webdriverio,你需要與你的自定義命令的聲明延伸WebdriverIO.Client接口。如果可以,請確保您的自定義命令是在.ts文件中定義的。然後,你可以做這樣的事情:
declare global {
namespace WebdriverIO {
interface Client<T> {
doCustomThing: typeof doCustomThing;
}
}
}
function doCustomThing() {
console.log("test");
}
//both of these should now work
browser.addCommand('doCustomThing' , doCustomThing)
browser.doCustomThing();
如果你不能得到打字稿實現您的自定義命令,您仍然可以單獨聲明他們在.d.ts文件看起來像這樣:
declare namespace WebdriverIO {
interface Client<T> {
doCustomThing(): void;
}
}
但你必須保持在單獨的文件中單獨申報和實施,並確保它們保持同步。除非你別無選擇,否則我不會走這條路線,而是用普通的JS繼續實施。
該測試成功地利用打字稿2.6.1,webdriverio 4.9.10,和@類型/ webdriverio 4.8.6。
注:在第一個例子,你必須指定要改變在全球範圍內的WebdriverIO命名空間的定義,但在第二,你是在全球範圍內隱工作。這是因爲第一個模塊位於模塊內部,而第二個模塊不是模塊,因爲它不導入或導出任何內容。欲瞭解更多信息,請參閱https://www.typescriptlang.org/docs/handbook/modules.html。