Como usar o jQuery com TypeScript

158

eu estou tentando

$(function(){ 
    alert('Hello'); 
});

Sua mostrando esse erro no Visual Studio: (TS) Cannot find name '$'.. Como posso usar o jQuery com TypeScript?

JavaScript Linq
fonte
3
Você pode apenas incluir esta linhaimport * as $ from "jquery";
jcubic

Respostas:

210

Provavelmente, você precisa baixar e incluir o arquivo de declaração TypeScript para jQuery jquery.d.ts- em seu projeto.

Opção 1: instalar o pacote @types (recomendado para TS 2.0+)

Na mesma pasta que o arquivo package.json , execute o seguinte comando:

npm install --save-dev @types/jquery

Em seguida, o compilador resolverá as definições para o jquery automaticamente.

Opção 2: Baixar manualmente (não recomendado)

Faça o download aqui .

Opção 3: Usando tipagens (anteriores ao TS 2.0)

Se você estiver usando digitações , poderá incluí-lo desta maneira:

// 1. Install typings
npm install typings -g
// 2. Download jquery.d.ts (run this command in the root dir of your project)
typings install dt~jquery --global --save

Depois de configurar o arquivo de definição, importe o alias ( $) no arquivo TypeScript desejado para usá-lo normalmente.

import $ from "jquery";
// or
import $ = require("jquery");

Você pode precisar compilar com --allowSyntheticDefaultImports—add "allowSyntheticDefaultImports": trueno tsconfig.json .

Também instalar o pacote?

Se você não possui o jquery instalado, provavelmente deseja instalá-lo como uma dependência via npm (mas esse nem sempre é o caso):

npm install --save jquery
David Sherret
fonte
6
Tive que reiniciar o visual studio para que funcionasse, pequeno passo, mas me tropeçou um pouco.
William Howley
1
@daslicht verificar esta questão
David Sherret
6
para ajudar os outros: Então você só precisa instalar o jquery: npm install jquery e usá-lo com import $ = require ('jquery');
Jonathan
28
Também pode usarimport * as $ from 'jquery'
gldraphael
1
Estou recebendo erroError TS1192 Module '"jquery"' has no default export.
Karthik
29

No meu caso, eu tive que fazer isso

npm install @types/jquery --save-dev // install jquery type as dev dependency so TS can compile properly
npm install jquery --save // save jquery as a dependency

Em seguida, no arquivo de script A.ts

import * as $ from "jquery";
... jquery code ...
Shobi
fonte
26

PARA código do Visual Studio

O que funciona para mim é garantir que eu faça o carregamento da biblioteca JQuery padrão por meio de um <script> tag no index.html.

Corre

npm install --save @types/jquery

Agora, as funções JQuery $ estão disponíveis em todos os arquivos .ts, sem necessidade de outras importações.

Sydwell
fonte
2
Você precisa declarar jquery / $ em seu componente, se TsLint estiver ativado para esses tipos de verificação de tipo. Por exemplo. javascript declare var jquery: any; declare var $: any;
Phoenisx
1
@ Subroto, sua sugestão está funcionando bem. Coloque isso como uma resposta. Obrigado.
precisa saber é o seguinte
21

Acredito que você possa precisar das tipografias do Typecript para JQuery. Desde que você disse que está usando o Visual Studio, você pode usar o Nuget para obtê-los.

https://www.nuget.org/packages/jquery.TypeScript.DefinitelyTyped/

O comando no Nuget Package Manager Console é

Install-Package jquery.TypeScript.DefinitelyTyped

Atualização: conforme observado no comentário, este pacote não é atualizado desde 2016. Mas você ainda pode visitar a página do Github em https://github.com/DefinitelyTyped/DefinitelyTyped e baixar os tipos. Navegue na pasta da sua biblioteca e faça o download do index.d.tsarquivo lá. Coloque-o em qualquer lugar no diretório do projeto e o VS deve usá-lo imediatamente.

Licht
fonte
2
O pacote nuget para DefinitelyTypes não é mais mantido. Você receberá uma versão antiga se fizer isso.
Dave de Jong
17

Para Angular CLI V7

npm install jquery --save
npm install @types/jquery --save

Verifique se o jquery possui uma entrada em angular.json -> scripts

...
    "scripts": [
        "node_modules/jquery/dist/jquery.min.js"
    ]
...

Vá para tsconfig.app.json e adicione uma entrada em "types"

{
    "extends": "../tsconfig.json",
    "compilerOptions": {
        "outDir": "../out-tsc/app",
        "types": ["jquery","bootstrap","signalr"]
    },
    "exclude": [
        "test.ts",
        "**/*.spec.ts"
    ]
}
Único
fonte
A propriedade 'modal' não existe no tipo 'JQuery <HTMLElement>'. recebendo este erro após a adição
user2900572 21/04
12

ATUALIZAÇÃO 2019:

Responder por David , é mais preciso.

O Typecript suporta bibliotecas de fornecedores de terceiros, que não usam o Typecript para o desenvolvimento da biblioteca, usando o DefinitelyTyped Repo .


Você precisa declarar jquery/ $em seu componente, se tsLint estiver ativado para esses tipos de verificação de tipo.

Por exemplo.

declare var jquery: any;
declare var $: any;
phoenisx
fonte
"se eles tiverem a digitação instalada", não entendi. Você quer dizer NÃO instalado? Por que declará-los como de outra forma? Eu só quero compilar sem erros e não instalar nada extra e estou trabalhando com bibliotecas que não têm tipos para instalar.
precisa saber é o seguinte
@redanimalwar Acho que escrevi isso, porque em projetos web como reactjs / angular, se o webpack é configurado manualmente, as bibliotecas de terceiros são definidas globalmente e é difícil dizer ao webpack de onde essas bibliotecas são importadas, portanto a declarepalavra - chave é usada. No entanto, ainda podemos dizer ao vscode sobre as tipagens, se elas estiverem presentes node_modules, é por isso que a instalação das tipagens ajuda no intellisense, mas para um projeto vanilla webpack, sem a declaretranspilação do projeto de palavras-chave falhará. Eu removi minha declaração da resposta, para não confundir as pessoas.
Phoenisx
De qualquer forma, não mexo com Angular / Typescript há muito tempo, mas sinto que, se as tipagens estiverem instaladas, poderíamos ter feito algo assim - import JQuery from 'jquery'; declare var $: JQuery;. Não tenho certeza, se isso vai funcionar.
Phoenisx
Eu tenho usado - typescriptlang.org/docs/handbook/… , no tsconfig, para suprimir problemas de tipo de terceiros.
Phoenisx
3

Se você deseja usar o jquery em um aplicativo da web (por exemplo, React) e o jquery já está carregado com <script src="jquery-3.3.1.js"...

Na página da web, você pode:

npm install --save-dev @types/query
and the use it with:
let $: JQueryStatic = (window as any)["jQuery"];

portanto, você não precisa carregar o jquery pela segunda vez (com npm install --save jquery), mas tem todas as vantagens do Typescript

Gerhard Friedrich
fonte
2

Aqui estão minhas etapas de configuração do TypeScript e jQuery.

Faz com que os tipos de jQuery suportem para funcionar melhor do que a maioria dos artigos na Internet . ( Acredito. )

primeiro:

npm install jquery --save
npm install @types/jquery --save-dev




segundo (muito muito muito importante!!!):

import jquery = require("jquery");



// this helps TypeScript to understand jQuery best !!!  otherwise It will confused .
const $: JQueryStatic = jquery;




então, você pode se divertir:

$(document).ready(function () {
    $('btn').click(function () {
       alert('I am clicked !')
    }
}




É suave como seda !!!

Lancer.Yan
fonte
então, tem que escrevê-lo em cada arquivo ts componente?
Humble Dolt
@HumbleDolt Se você ligar o jQuery na 【janela】, basta adicionar declare global { interface Window { $ :JQueryStatic; } }yourTypeDeclaration.d.ts. E, considerando adequadamente, é necessário verificar se $ está montado na 【janela】. Tal como import $ = require('jquery'); window.$ = $ ;, ou o seu jQuery 【$】 foi montado por uma tag de script externa.
precisa saber é o seguinte
você quer dizer, pode incluir um script em index.html e escrever lá? typeDeclaration.ts em angular 8? existe tsconfig.json
Humble Dolt
@ HumbleDolt Então, você pode tentar a segunda solução import $ = require('jquery') ; window.$ = $;. (É melhor você iniciar este, no ponto de início do projeto. E eu prefiro criar um sdkdir, para gerenciar todos os requisitos da biblioteca externa e inicializar em um arquivo ou local).
precisa saber é o seguinte
@HumbleDolt (yourTypeDeclaretion.d.ts) é apenas um arquivo definido por tipo. É um arquivo especial para definir seus próprios tipos. No TypeScript, 【.d.ts】 é apenas uma maneira explícita de isolamento, para distinguir o reconhecimento de tipo e o código verdadeiro. Você também pode escrever o snippet de declaração de tipo em um arquivo ts .ts,, ele ainda funcionará. (talvez com algum aviso gramática correção)
Lancer.Yan
1

Este trabalho para mim agora e hoje na versão Angular 9

  1. Instale via npm this: npm i @ types / jquery basta adicionar --save para configurar globalmente.
  2. Vá para tsconfig.app.json e adicione na matriz "types" jquery.
  3. ng servir e pronto.
Mikaelo Soltes
fonte
0

Isso funciona para mim:

export var jQuery: any = window["jQuery"];
Salar
fonte
1
Isso funcionaria, mas não funcionaria como um tipo muito forte, o que perde os benefícios de usá-lo com o TypeScript, caso você queira usar bibliotecas externas. Ainda é uma abordagem bastante interessante.
bnns