gpt4 book ai didi

jquery - 在 Node.js 中的 TypeScript 1.6.2 中导入 jQuery

转载 作者:太空宇宙 更新时间:2023-11-03 23:06:26 24 4
gpt4 key购买 nike

我正在使用 Node.js 开发爬虫。我使用 jQuery 来解析使用以下构建的页面jsdom

我找到了jquery.d.ts通过tsd,结束如下:

declare module "jquery" {
export = $;
}
declare var jQuery: JQueryStatic;
declare var $: JQueryStatic;

这个定义似乎只能在加载 jQuery 的客户端上使用全局或全局窗口变量可用的地方...

如上所述here ,在不存在 window.document 的环境中导入(使用 require)时可用(如 Node.js),jQuery 导出其自身的工厂,该工厂必须是使用窗口对象初始化:

// JavaScript (ES5)
var jquery = require("jquery");
// ...
var $ = jquery(window);

但是对于 TypeScript,因为定义不包含这个工厂。它不起作用:

// TypeScript
import jquery from "jquery"; // Module '"jquery"' has no default export
import {jquery} from "jquery" // Module '"jquery"' has no exported member 'jquery'
import {jQuery} from "jquery" // Module '"jquery"' has no exported member 'jQuery'
import {$} from "jquery" // Module '"jquery"' has no exported member '$'
import * as jquery from "jquery"; // Doesn't complain here, but `jquery` variable is not usable

我试图写一个这个工厂的定义,但似乎没那么简单正如我所认为的:

interface JQueryFactory {
(window: any): JQueryStatic;
}

declare module "jquery" {
export default JQueryFactory;
}
declare var jQuery: JQueryStatic;
declare var $: JQueryStatic;

并使用它:

// TypeScript
/// <reference path="../../typings/tsd.d.ts"/>

import jquery from "jquery";
// ...
var $ = jquery(window); // error TS2304: Cannot find name 'jquery'

但是现在我遇到了这个奇怪的错误?!

最佳答案

我回答我的问题:

我非常接近,现在,我的 jquery.d.ts 结束如下:

declare var jQuery: JQueryStatic;
declare var $: JQueryStatic;
declare function jQueryFactory (window: any): JQueryStatic;
declare module "jquery" {
export default jQueryFactory;
}

如果没有声明 jQueryFactory 函数,我就无法成功实现此目的。

作为一个小例子,现在基本上可以这样使用:

import {env}  from "jsdom";
import jquery from "jquery";

interface StuffInterface
{
title: string;
text: string;
}

function parse (url: string): Promise<StuffInterface>
{
return new Promise((resolve, reject) => {
env(url, (e, window) => {
if (e) {
reject(e);
return;
}

var $ = jquery(window);
var stuff = {
title: $('#stuff h1').text(),
text: $('#stuff .content').text()
};

resolve(stuff);
});
});
}

关于jquery - 在 Node.js 中的 TypeScript 1.6.2 中导入 jQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33699062/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com