#javascript #selenium-webdriver #typescript #protractor
#javascript #selenium-webdriver #typescript #транспортир
Вопрос:
Я использую protractor 4.x
с TypeScript. Используя TypeScript 2.0
, компилятор жалуется в следующем тесте:
it('should have url', done=>{
browser.getCurrentUrl().then((x)=>{
// do something with x
})
})
Он говорит: error TS7006: Parameter 'x' implicitly has an 'any' type.
Да, я знаю, что могу отключить это в файле, tsconfig.json
или явно установить тип, но мой реальный вопрос — почему?
Когда я навожу на browser.getCurrentUrl()
него указатель мыши, это ясно говорит (property) Webdriver.getCurrentUrl: () => webdriver.promise.Promise<string>
об этом, x должен неявно иметь тип string
Шаги воспроизведения
- клонировать
https://github.com/angular/protractor
- следуйте инструкциям для запуска примеров
- в папке examples установите
noImplicitAny
значениеtrue
intsconfig.json
- добавьте тест сверху в
spec.ts
файл - попробуйте скомпилировать.
tsconfig.json
(прямо из транспортира):
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": false,
"declaration": false,
"noImplicitAny": true,
"outDir": "tmp",
"types": ["node", "jasmine"]
},
"exclude": [
"node_modules",
"asyncAwait",
"plugins.ts"
]
}
Комментарии:
1. Не могли бы вы показать свое
tsconfig.json
содержимое?2. добавит его, но это готовый tsconfig из примера транспортира.
3. Хорошо, но
noImplicitAny
false
в вашей конфигурации установлено значение ..?4. Извините, просто скопировал его с сайта. Исправляем это сейчас.
Ответ №1:
Причина этого в том, что вам нужно явно указать тип параметра x
:
it('should have url', done=>{
browser.getCurrentUrl().then((x: string)=>{
// do something with x
})
})
Комментарии:
1. Не уверен, почему этот ответ был отклонен, когда он правильно отвечает на вопрос OP.
2. Да, я тоже умею читать. Но
getCurrentUrl ()
возвращает введенное обещаниеPromise <string>
, поэтому мне не нужно.3. Но Typescript не понимает этого на данный момент. Что касается этого, он не видит тип, которому присвоен
x
, поэтому он интерпретирует его как «подразумеваемый any», что нарушает ваш tsconfig. Вы можете обойти это, либо явно указавx
тип any, либо, если вы знаете, что он всегда будет возвращать aPromise<string>
, тогда вы можете присвоить ему этот тип.4. Насколько я знаю, TypeScript в настоящее время не может вывести типы из этого.
5. Это неверно. Следующее компилируется и работает просто отлично: Promise.resolve(‘data’) .then(x => { return x; });