fel TS2339: Egenskapen 'modal' finns inte på typ 'JQuery'
Jag använder Typescript med AngularJS. Jag har ett problem med modaler som använder typade definitioner av jQuery-biblioteket. Jag får följande fel: 'error TS2339: Egenskapen 'modal' finns inte på typen 'JQuery'.
Version: jQuery-bibliotek, version 1.10.x/2.0.x Definitioner: https://github.com/borisyankov/DefinitelyTyped
Kod
$scope.delete = function (id) {
Photo.get({id: id}, function(result) {
$scope.photo = result;
$('#deletePhotoConfirmation').modal('show');// error line
});
};
Jag refererar till jquery.d.ts i angular.d.ts
<reference path="../jquery/jquery.d.ts" />
och min globala leverantörsreferensfil ser ut så här:
<reference path='../vendor/types/angular/angular.d.ts' />
<reference path='../vendor/types/angular/angular-mocks.d.ts' />
<reference path='../vendor/types/jasmine/jasmine.d.ts' />
Svar #1
med nyare versioner av TypeScript (>v2 tror jag):
npm install -D @types/bootstrap
Redigera: Som hughjdavey sa i sin kommentar, behöver du också följande importrader:
import * as bootstrap from "bootstrap";
import * as $ from 'jquery';
Svar #2
Ditt problem orsakas av bristen på en egenskap med namnet modal i filen jquery.d.ts.
Om du är säker på att detta fungerar i ren JS kan du lura med det så här
$scope.delete = function (id) {
Photo.get({id: id}, function(result) {
$scope.photo = result;
(<any>$('#deletePhotoConfirmation')).modal('show');
});
};
Du kan också hitta en ytterligare d.ts-fil där detta alternativ redan har definierats.
Försök att överväga detta bibliotek som redan har haft modal-alternativet
Lycka till!
Svar #3
I mitt fall var jag tvungen att använda
npm install -D @types/bootstrap
och sedan var jag tvungen att importera bootstrap
import * as bootstrap from 'bootstrap';
men det viktigaste steget var att ta bort jquery
import * as $ from 'jquery';
annars gav det mig detta fel:
TypeError: $ (...).modal är inte en funktion
Svar #4
När jag uppgraderade Angular till version 9 stötte jag på detta problem.
Här är min lösning, jag delade den för den som berörs.
Egenskapen 'modal' finns inte på typen 'JQuery'
$('#ManualMinMaxModal').modal('show');
ändra till
($('#ManualMinMaxModal') as any).modal('show');
Och
Egenskapen 'DataTable' finns inte på typen 'JQuery'
$('#realTimeTable').DataTable()
ändra till
($('#realTimeTable') as any).DataTable()
Med
!$.fn.DataTable.isDataTable('#realTimeTable')
ändra till
!($.fn as any).DataTable.isDataTable('#realTimeTable')
Uppdaterad :
typomvandla till any fungerar ibland inte, och den slutliga lösningen är att ändra deklarationen från import * as $ from 'jquery' till declare var $: any;
