San*_*rog 52 javascript webstorm typescript protractor
我有一个包含这样一个文件的Protractor项目:
var FriendCard = function (card) {
var webElement = card;
var menuButton;
var serialNumber;
this.getAsWebElement = function () {
return webElement;
};
this.clickMenuButton = function () {
menuButton.click();
};
this.setSerialNumber = function (numberOfElements) {
serialNumber = numberOfElements + 1;
menuButton = element(by.xpath('.//*[@id=\'mCSB_2_container\']/li[' + serialNumber + ']/ng-include/div/div[2]/i'));
};
this.deleteFriend = function () {
element(by.css('[ng-click="deleteFriend(person);"]')).click();
element(by.css('[ng-click="confirm()"]')).click();
}
};
module.exports = FriendCard;
Run Code Online (Sandbox Code Playgroud)
该文件的路径是
./pages/FriendCard.js
我没有问题,使用require()方法导入到另一个文件:
var FriendCard = require('./../pages/FriendCard');
Run Code Online (Sandbox Code Playgroud)
所以,我决定将这个文件导入到TypeScript文件中:
import {FriendCard} from './../pages/FriendCard'
Run Code Online (Sandbox Code Playgroud)
我正在使用WebStorm,所以它告诉我,(TS2305)它没有导出成员'FriendCard'.
也许我必须以某种方式配置tsconfig.json文件,但我仍然不知道它是如何工作的.你可以帮帮我吗?
Ram*_*ala 56
您可以按如下方式导入整个模块:
import * as FriendCard from './../pages/FriendCard';
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅Typescript官方文档的模块部分.
Pau*_*est 13
我目前正在使用一些旧的代码库,并介绍TypeScript的最小更改,以了解它是否对我们的团队有所帮助。根据您对TypeScript的严格要求,这可能是您的选择,也可能不是。
对于我们而言,最有用的方法是tsconfig.json
使用以下属性扩展文件:
// tsconfig.json excerpt:
{
...
"allowJs": true,
...
}
Run Code Online (Sandbox Code Playgroud)
此更改使具有JSDoc类型提示的JS文件得以编译。同样,我们的IDE(JetBrains IDE和VS Code)也可以提供代码完成和Intellisense。
在你的第二个陈述中
import {FriendCard} from './../pages/FriendCard'
Run Code Online (Sandbox Code Playgroud)
您正在告诉打字稿从文件“ ./pages/FriendCard” 导入FriendCard 类
您的FriendCard文件正在导出一个变量,并且该变量引用了匿名函数。
您在这里有两个选择。如果要以键入方式执行此操作,则可以重构要键入的模块(选项1),也可以导入匿名函数并添加d.ts文件。有关更多详细信息,请参见https://github.com/Microsoft/TypeScript/issues/3019。关于为什么需要添加文件的信息。
重构要输入的Friend card js文件。
export class FriendCard {
webElement: any;
menuButton: any;
serialNumber: any;
constructor(card) {
this.webElement = card;
this.menuButton;
this.serialNumber;
}
getAsWebElement = function () {
return this.webElement;
};
clickMenuButton = function () {
this.menuButton.click();
};
setSerialNumber = function (numberOfElements) {
this.serialNumber = numberOfElements + 1;
this.menuButton = element(by.xpath('.//*[@id=\'mCSB_2_container\']/li[' + serialNumber + ']/ng-include/div/div[2]/i'));
};
deleteFriend = function () {
element(by.css('[ng-click="deleteFriend(person);"]')).click();
element(by.css('[ng-click="confirm()"]')).click();
}
};
Run Code Online (Sandbox Code Playgroud)
您可以导入匿名函数
import * as FriendCard from module("./FriendCardJs");
Run Code Online (Sandbox Code Playgroud)
d.ts文件定义有几个选项。这个答案似乎是最完整的:如何从现有的JavaScript库中生成.d.ts“类型”定义文件?
我测试了 3 种方法来做到这一点......
方法一:
const FriendCard:any = require('./../pages/FriendCard')
Run Code Online (Sandbox Code Playgroud)
方法二:
import * as FriendCard from './../pages/FriendCard';
Run Code Online (Sandbox Code Playgroud)
方法三:
如果你可以在 tsconfig.json 中找到类似的内容:
{ "compilerOptions": { ..., "allowJs": true }
Run Code Online (Sandbox Code Playgroud)
那么你可以写:
import FriendCard from './../pages/FriendCard';
如果您仍然收到此错误消息:
TS7016: Could not find a declaration file for module './myjsfile'
Run Code Online (Sandbox Code Playgroud)
那么您可能需要将以下内容添加到 tsconfig.json
TS7016: Could not find a declaration file for module './myjsfile'
Run Code Online (Sandbox Code Playgroud)
这可以防止 typescript 尝试将模块类型应用于导入的 javascript。
归档时间: |
|
查看次数: |
101201 次 |
最近记录: |