ERROR in src/app/dashboardponent.ts(49,15): error TS2339: Property 'style' does not exist on type 'Element'. src/app/dashboardponent.ts(50,16): error TS2339: Property 'textContent' does not exist on type 'EventTarget'.
This works as a javascript function, but the above are the errors I get when I try to use this in typescript. I have tried changing var to let and adding . any other suggestions? Thanks.
dashboard.ts
var w = document.getElementById('wrapper');
var button = document.getElementById('randomize');
var image = w.children; // inner elements, your quotes divs
// a function to hide all divs
var hideDivs = function(divs) {
for (var div of divs) {
div.style.display = 'none';
}
}
hideDivs(image); // hide all initially
// on click
button.addEventListener('click', function(event) {
var rnd = Math.floor(Math.random() * image.length); // get random index
hideDivs(image); // hide all quotes
image[rnd].style.display = 'block'; // show random quote
event.target.textContent = 'Click one more time!'; // set button text. event.target is the button you've clicked
})
dashboard.html
<div id="wrapper">
<div class="image" img scr='../../assets/mood.jpg'></div>
<div class="image" img scr='../../assets/mood.jpg'></div>
<div class="image" img scr='../../assets/mood.jpg'></div>
<div class="image" img scr='../../assets/mood.jpg'></div>
<div class="image" img scr='../../assets/mood.jpg'></div>
</div>
<button id='randomize'>Next</button>
ERROR in src/app/dashboard.ponent.ts(49,15): error TS2339: Property 'style' does not exist on type 'Element'. src/app/dashboard.ponent.ts(50,16): error TS2339: Property 'textContent' does not exist on type 'EventTarget'.
This works as a javascript function, but the above are the errors I get when I try to use this in typescript. I have tried changing var to let and adding . any other suggestions? Thanks.
dashboard.ts
var w = document.getElementById('wrapper');
var button = document.getElementById('randomize');
var image = w.children; // inner elements, your quotes divs
// a function to hide all divs
var hideDivs = function(divs) {
for (var div of divs) {
div.style.display = 'none';
}
}
hideDivs(image); // hide all initially
// on click
button.addEventListener('click', function(event) {
var rnd = Math.floor(Math.random() * image.length); // get random index
hideDivs(image); // hide all quotes
image[rnd].style.display = 'block'; // show random quote
event.target.textContent = 'Click one more time!'; // set button text. event.target is the button you've clicked
})
dashboard.html
<div id="wrapper">
<div class="image" img scr='../../assets/mood.jpg'></div>
<div class="image" img scr='../../assets/mood.jpg'></div>
<div class="image" img scr='../../assets/mood.jpg'></div>
<div class="image" img scr='../../assets/mood.jpg'></div>
<div class="image" img scr='../../assets/mood.jpg'></div>
</div>
<button id='randomize'>Next</button>
Share
Improve this question
asked Mar 29, 2018 at 12:14
Katie KennedyKatie Kennedy
1593 silver badges11 bronze badges
1 Answer
Reset to default 6The problem is that target
is typed as EventTarget
, and an element of image
which is a HTMLCollection
is typed as Element
. Both of the properties you want to access are defined on HTMLElement
. The simplest thing you can do is to use a type assertion to tell the piler that in your case both of these are actually HTMLElement
// on click
button.addEventListener('click', function (event) {
var rnd = Math.floor(Math.random() * image.length); // get random index
hideDivs(image); // hide all quotes
(image[rnd] as HTMLElement).style.display = 'block'; // show random quote
(event.target as HTMLElement).textContent = 'Click one more time!'; // set button tqext. event.target is the button you've clicked
})
Yo might also want to type hideDivs
correctly as well :
// a function to hide all divs
const hideDivs = function (divs : HTMLCollection) {
for (var div of divs) {
(div as HTMLElement).style.display = 'none';
}
}