Angular 6 - свойство '$' не существует для типа 'Window' - PullRequest
0 голосов
/ 26 августа 2018

Я пытаюсь использовать jQuery и jsGrid с моим проектом Angular 6, и он не скомпилируется, если я не закомментирую часть кода, вызывающую оскорбления, а затем один раз, когда он скомпилирован, я комментирую, и это работает, но в любом случае выдает ошибку.Я использую Angular 6 CLI, IDE - это код Visual Studio, все последние версии.VS выделяет псевдоним jQuery, т. Е. $ Sign, как проблему

Вот структура.directive.ts (мне нужно закомментировать весь ngOnInit, чтобы запустить сервер, затем раскомментировать его):

import { Directive, ElementRef, OnInit } from '@angular/core';

@Directive({
  selector: '[structure]'
})
export class StructureDirective implements OnInit {

  clients = [
    { "Name": "Otto Clay", "Age": 25, "Country": 1, "Address": "Ap #897-1459 Quam Avenue", "Married": false },
    { "Name": "Connor Johnston", "Age": 45, "Country": 2, "Address": "Ap #370-4647 Dis Av.", "Married": true },
    { "Name": "Lacey Hess", "Age": 29, "Country": 3, "Address": "Ap #365-8835 Integer St.", "Married": false },
    { "Name": "Timothy Henson", "Age": 56, "Country": 1, "Address": "911-5143 Luctus Ave", "Married": true },
    { "Name": "Ramona Benton", "Age": 32, "Country": 3, "Address": "Ap #614-689 Vehicula Street", "Married": false }
  ];

  countries = [
    { Name: "", Id: 0 },
    { Name: "United States", Id: 1 },
    { Name: "Canada", Id: 2 },
    { Name: "United Kingdom", Id: 3 }
  ];

  constructor(private elementRef: ElementRef) { }

  ngOnInit() {
    window.$(this.elementRef.nativeElement).jsGrid({
      width: "100%",
      height: "400px",

      inserting: true,
      editing: true,
      sorting: true,
      paging: true,

      data: this.clients,

      fields: [
        { name: "Name", type: "text", width: 150, validate: "required" },
        { name: "Age", type: "number", width: 50 },
        { name: "Address", type: "text", width: 200 },
        { name: "Country", type: "select", items: this.countries, valueField: "Id", textField: "Name" },
        { name: "Married", type: "checkbox", title: "Is Married", sorting: false },
        { type: "control" }
      ]
    })
  }
}

и вотis index.html

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Aug4</title>
  <base href="/">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="favicon.ico">

  <link type="text/css" rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jsgrid/1.5.3/jsgrid.min.css" />
  <link type="text/css" rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jsgrid/1.5.3/jsgrid-theme.min.css" />

  <script src="https://code.jquery.com/jquery-3.3.1.js" integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60=" crossorigin="anonymous"></script>
  <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jsgrid/1.5.3/jsgrid.min.js"></script>
</head>
<body>
  <app-root>Loading...</app-root>
</body>
</html>

Ошибка:

Date: 2018-08-26T14:01:56.175Z - Hash: fb473e9c8d7de6bf4569 - Time: 224ms
4 unchanged chunks
chunk {main} main.js, main.js.map (main) 52.1 kB [initial] [rendered]
i 「wdm」: Compiled successfully.
ERROR in src/app/structure.directive.ts(26,12): error TS2339: Property '$' does not exist on type 'Window'.

Как я могу решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Для справки вот что я сделал (спасибо Патрику):

npm install @types/jquery

и затем в компоненте:

declare var $: any;
declare var jsGrid: any;

В противном случае будет возникать та же ошибка для jsGrid.

0 голосов
/ 26 августа 2018

Это проблема с типами машинописи, а не с угловыми.Запустите эту команду

npm install @types/jquery --save-dev

или, если вы используете пряжу:

yarn add @types/jquery

, а затем добавьте ее в файл объявления типа aka somefile.d.ts

declare global {
  interface Window {
    $: JQueryStatic
   }
}

Этот подход только делает типы доступными!Вам все еще нужно импортировать jquery куда-нибудь.

или вы можете импортировать jquery.Это будет включать в себя саму библиотеку и типы.

import * as $ from "jquery"

и использовать ее без префикса окна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...