Skip to content
This repository was archived by the owner on Aug 15, 2019. It is now read-only.

Commit 27ca171

Browse files
authored
Remove non-nullable "!" operator (#60)
* Remove non-nullable "!" operator * fix lint errors
1 parent 156c227 commit 27ca171

21 files changed

+254
-233
lines changed

demos/adder/adder.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ adder.setupSession();
5050
const outputEl = document.getElementById('output');
5151
if (!outputEl) throw new Error('output element not found');
5252
function printOutput(out: number) {
53-
outputEl!.innerText = String(out);
53+
outputEl.innerText = String(out);
5454
}
5555

5656
const inA: HTMLInputElement = document.getElementById('A') as HTMLInputElement;
@@ -59,8 +59,8 @@ const inB: HTMLInputElement = document.getElementById('B') as HTMLInputElement;
5959
if (!inB) throw new Error('output B not found');
6060

6161
export function execute(event?: Event) {
62-
const a = +inA!.value;
63-
const b = +inB!.value;
62+
const a = +inA.value;
63+
const b = +inB.value;
6464

6565
printOutput(adder.computeSum(a, b));
6666
}

demos/homepage/index.ts

+27-20
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,13 @@ function isSafari() {
2929
}
3030
function isMobile() {
3131
// tslint:disable-next-line:no-any
32-
const a = navigator.userAgent||navigator.vendor||(window as any).opera;
32+
const a = navigator.userAgent || navigator.vendor || (window as any).opera;
3333
// tslint:disable-next-line:max-line-length
34-
return /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4));
34+
return /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i
35+
.test(a) ||
36+
// tslint:disable-next-line:max-line-length
37+
/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i
38+
.test(a.substr(0, 4));
3539
}
3640

3741
const inferenceCanvas =
@@ -78,32 +82,35 @@ function startCPPN() {
7882
const currentColorElement =
7983
document.querySelector('#colormode') as HTMLInputElement;
8084

81-
document.querySelector('#color-selector')!.addEventListener(
82-
// tslint:disable-next-line:no-any
83-
'click', (event: any) => {
84-
const colorMode =
85-
(event.target as HTMLElement).getAttribute('data-val') as ColorMode;
86-
currentColorElement.value = colorMode;
87-
cppn.setColorMode(colorMode);
88-
});
85+
document.querySelector('#color-selector')
86+
.addEventListener(
87+
// tslint:disable-next-line:no-any
88+
'click', (event: any) => {
89+
const colorMode =
90+
(event.target as HTMLElement).getAttribute('data-val') as
91+
ColorMode;
92+
currentColorElement.value = colorMode;
93+
cppn.setColorMode(colorMode);
94+
});
8995

9096
const currentActivationFnElement =
9197
document.querySelector('#activation-fn') as HTMLInputElement;
92-
document.querySelector('#activation-selector')!.addEventListener(
93-
// tslint:disable-next-line:no-any
94-
'click', (event: any) => {
95-
const activationFn =
96-
(event.target as HTMLElement).getAttribute('data-val') as
97-
ActivationFunction;
98-
currentActivationFnElement.value = activationFn;
99-
cppn.setActivationFunction(activationFn);
100-
});
98+
document.querySelector('#activation-selector')
99+
.addEventListener(
100+
// tslint:disable-next-line:no-any
101+
'click', (event: any) => {
102+
const activationFn =
103+
(event.target as HTMLElement).getAttribute('data-val') as
104+
ActivationFunction;
105+
currentActivationFnElement.value = activationFn;
106+
cppn.setActivationFunction(activationFn);
107+
});
101108

102109
const layersSlider =
103110
document.querySelector('#layers-slider') as HTMLInputElement;
104111
const layersCountElement =
105112
document.querySelector('#layers-count') as HTMLDivElement;
106-
layersSlider!.addEventListener('input', (event) => {
113+
layersSlider.addEventListener('input', (event) => {
107114
// tslint:disable-next-line:no-any
108115
const numLayers = parseInt((event as any).target.value, 10);
109116
layersCountElement.innerText = '' + numLayers;

demos/imagenet/imagenet-demo.ts

+12-12
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,15 @@ import {PolymerElement, PolymerHTMLElement} from '../polymer-spec';
2323

2424
// tslint:disable-next-line:variable-name
2525
export const ImagenetDemoPolymer: new () => PolymerHTMLElement =
26-
PolymerElement({
27-
is: 'imagenet-demo',
28-
properties: {
29-
layerNames: Array,
30-
selectedLayerName: String,
31-
inputNames: Array,
32-
selectedInputName: String
33-
}
34-
});
26+
PolymerElement({
27+
is: 'imagenet-demo',
28+
properties: {
29+
layerNames: Array,
30+
selectedLayerName: String,
31+
inputNames: Array,
32+
selectedInputName: String
33+
}
34+
});
3535

3636
/**
3737
* NOTE: To use the webcam without SSL, use the chrome flag:
@@ -73,7 +73,7 @@ export class ImagenetDemo extends ImagenetDemoPolymer {
7373
this.layerNames = [];
7474
this.selectedLayerName = 'conv_1';
7575

76-
const inputDropdown = this.querySelector('#input-dropdown')!;
76+
const inputDropdown = this.querySelector('#input-dropdown');
7777
// tslint:disable-next-line:no-any
7878
inputDropdown.addEventListener('iron-activate', (event: any) => {
7979
const selectedInputName = event.detail.selected;
@@ -170,8 +170,8 @@ export class ImagenetDemo extends ImagenetDemoPolymer {
170170
if (!(className in topClassesToProbability)) {
171171
continue;
172172
}
173-
document.getElementById('class' + count)!.innerHTML = className;
174-
document.getElementById('prob' + count)!.innerHTML =
173+
document.getElementById('class' + count).innerHTML = className;
174+
document.getElementById('prob' + count).innerHTML =
175175
'' + Math.floor(1000 * topClassesToProbability[className]) / 1000;
176176
count++;
177177
}

demos/mnist/mnist.ts

+7-5
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ reader.getAllVariables().then(vars => {
3737
}
3838
}
3939
const accuracy = numCorrect * 100 / data.images.length;
40-
document.getElementById('accuracy')!.innerHTML = accuracy + '%';
40+
document.getElementById('accuracy').innerHTML = accuracy + '%';
4141
});
4242
};
4343
xhr.onerror = (err) => console.error(err);
@@ -68,10 +68,12 @@ export function buildModelMathAPI(
6868

6969
return (x: Array1D): Scalar => {
7070
return math.scope(() => {
71-
const hidden1 = math.relu(
72-
math.add(math.vectorTimesMatrix(x, hidden1W), hidden1B)) as Array1D;
73-
const hidden2 = math.relu(math.add(
74-
math.vectorTimesMatrix(hidden1, hidden2W), hidden2B)) as Array1D;
71+
const hidden1 =
72+
math.relu(math.add(math.vectorTimesMatrix(x, hidden1W), hidden1B)) as
73+
Array1D;
74+
const hidden2 =
75+
math.relu(math.add(
76+
math.vectorTimesMatrix(hidden1, hidden2W), hidden2B)) as Array1D;
7577
const logits =
7678
math.add(math.vectorTimesMatrix(hidden2, softmaxW), softmaxB);
7779
return math.argMax(logits);

demos/model-builder/model-builder.ts

+34-31
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ import './model-layer';
1919
import '../demo-header';
2020
import '../demo-footer';
2121

22-
import {PolymerElement, PolymerHTMLElement} from '../polymer-spec';
2322
// tslint:disable-next-line:max-line-length
2423
import {Array1D, Array3D, DataStats, FeedEntry, Graph, GraphRunner, GraphRunnerEventObserver, InCPUMemoryShuffledInputProviderBuilder, InMemoryDataset, MetricReduction, NDArray, NDArrayMath, NDArrayMathCPU, NDArrayMathGPU, Optimizer, Scalar, Session, SGDOptimizer, Tensor, util} from '../deeplearnjs';
2524
import {NDArrayImageVisualizer} from '../ndarray-image-visualizer';
2625
import {NDArrayLogitsVisualizer} from '../ndarray-logits-visualizer';
26+
import {PolymerElement, PolymerHTMLElement} from '../polymer-spec';
2727
import * as xhr_dataset from '../xhr-dataset';
2828
import {XhrDataset, XhrDatasetConfig} from '../xhr-dataset';
2929

@@ -190,27 +190,29 @@ export class ModelBuilder extends ModelBuilderPolymer {
190190
// Set up datasets.
191191
this.populateDatasets();
192192

193-
this.querySelector('#dataset-dropdown .dropdown-content')!.addEventListener(
194-
// tslint:disable-next-line:no-any
195-
'iron-activate', (event: any) => {
196-
// Update the dataset.
197-
const datasetName = event.detail.selected;
198-
this.updateSelectedDataset(datasetName);
193+
this.querySelector('#dataset-dropdown .dropdown-content')
194+
.addEventListener(
195+
// tslint:disable-next-line:no-any
196+
'iron-activate', (event: any) => {
197+
// Update the dataset.
198+
const datasetName = event.detail.selected;
199+
this.updateSelectedDataset(datasetName);
199200

200-
// TODO(nsthorat): Remember the last model used for each dataset.
201-
this.removeAllLayers();
202-
});
203-
this.querySelector('#model-dropdown .dropdown-content')!.addEventListener(
204-
// tslint:disable-next-line:no-any
205-
'iron-activate', (event: any) => {
206-
// Update the model.
207-
const modelName = event.detail.selected;
208-
this.updateSelectedModel(modelName);
209-
});
201+
// TODO(nsthorat): Remember the last model used for each dataset.
202+
this.removeAllLayers();
203+
});
204+
this.querySelector('#model-dropdown .dropdown-content')
205+
.addEventListener(
206+
// tslint:disable-next-line:no-any
207+
'iron-activate', (event: any) => {
208+
// Update the model.
209+
const modelName = event.detail.selected;
210+
this.updateSelectedModel(modelName);
211+
});
210212

211213
{
212214
const normalizationDropdown =
213-
this.querySelector('#normalization-dropdown .dropdown-content')!;
215+
this.querySelector('#normalization-dropdown .dropdown-content');
214216
// tslint:disable-next-line:no-any
215217
normalizationDropdown.addEventListener('iron-activate', (event: any) => {
216218
const selectedNormalizationOption = event.detail.selected;
@@ -225,20 +227,20 @@ export class ModelBuilder extends ModelBuilderPolymer {
225227
this.showTrainStats = false;
226228
this.showDatasetStats = false;
227229

228-
const addButton = this.querySelector('#add-layer')!;
230+
const addButton = this.querySelector('#add-layer');
229231
addButton.addEventListener('click', () => this.addLayer());
230232

231-
const downloadModelButton = this.querySelector('#download-model')!;
233+
const downloadModelButton = this.querySelector('#download-model');
232234
downloadModelButton.addEventListener('click', () => this.downloadModel());
233-
const uploadModelButton = this.querySelector('#upload-model')!;
235+
const uploadModelButton = this.querySelector('#upload-model');
234236
uploadModelButton.addEventListener('click', () => this.uploadModel());
235237
this.setupUploadModelButton();
236238

237-
const uploadWeightsButton = this.querySelector('#upload-weights')!;
239+
const uploadWeightsButton = this.querySelector('#upload-weights');
238240
uploadWeightsButton.addEventListener('click', () => this.uploadWeights());
239241
this.setupUploadWeightsButton();
240242

241-
const stopButton = this.querySelector('#stop')!;
243+
const stopButton = this.querySelector('#stop');
242244
stopButton.addEventListener('click', () => {
243245
this.applicationState = ApplicationState.IDLE;
244246
this.graphRunner.stopTraining();
@@ -250,12 +252,13 @@ export class ModelBuilder extends ModelBuilderPolymer {
250252
this.startTraining();
251253
});
252254

253-
this.querySelector(
254-
'#environment-toggle')!.addEventListener('change', (event) => {
255-
// tslint:disable-next-line:no-any
256-
this.math = (event.target as any).active ? this.mathGPU : this.mathCPU;
257-
this.graphRunner.setMath(this.math);
258-
});
255+
this.querySelector('#environment-toggle')
256+
.addEventListener('change', (event) => {
257+
this.math =
258+
// tslint:disable-next-line:no-any
259+
(event.target as any).active ? this.mathGPU : this.mathCPU;
260+
this.graphRunner.setMath(this.math);
261+
});
259262

260263
this.hiddenLayers = [];
261264
this.examplesPerSec = 0;
@@ -774,7 +777,7 @@ export class ModelBuilder extends ModelBuilderPolymer {
774777
// Show and setup the load view button.
775778
const fileInput = this.querySelector('#model-file') as HTMLInputElement;
776779
fileInput.addEventListener('change', event => {
777-
const file = fileInput.files![0];
780+
const file = fileInput.files[0];
778781
// Clear out the value of the file chooser. This ensures that if the user
779782
// selects the same file, we'll re-read it.
780783
fileInput.value = '';
@@ -816,7 +819,7 @@ export class ModelBuilder extends ModelBuilderPolymer {
816819
// Show and setup the load view button.
817820
const fileInput = this.querySelector('#weights-file') as HTMLInputElement;
818821
fileInput.addEventListener('change', event => {
819-
const file = fileInput.files![0];
822+
const file = fileInput.files[0];
820823
// Clear out the value of the file chooser. This ensures that if the user
821824
// selects the same file, we'll re-read it.
822825
fileInput.value = '';

demos/model-builder/model-layer.ts

+9-8
Original file line numberDiff line numberDiff line change
@@ -62,14 +62,15 @@ export class ModelLayer extends ModelLayerPolymer {
6262
this.inputShape = inputShape;
6363
this.buildParamsUI('Fully connected', this.inputShape);
6464

65-
this.querySelector('.dropdown-content')!.addEventListener(
66-
// tslint:disable-next-line:no-any
67-
'iron-activate', (event: any) => {
68-
this.buildParamsUI(
69-
event.detail.selected as LayerName, this.inputShape);
70-
});
71-
72-
this.querySelector('#remove-layer')!.addEventListener('click', (event) => {
65+
this.querySelector('.dropdown-content')
66+
.addEventListener(
67+
// tslint:disable-next-line:no-any
68+
'iron-activate', (event: any) => {
69+
this.buildParamsUI(
70+
event.detail.selected as LayerName, this.inputShape);
71+
});
72+
73+
this.querySelector('#remove-layer').addEventListener('click', (event) => {
7374
modelBuilder.removeLayer(this);
7475
});
7576
}

demos/nn-art/nn-art.ts

+23-22
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,8 @@ const MAT_WIDTH = 30;
2323
const WEIGHTS_STDEV = .6;
2424

2525
// tslint:disable-next-line:variable-name
26-
const NNArtPolymer: new () => PolymerHTMLElement = PolymerElement({
27-
is: 'nn-art', properties: {}
28-
});
26+
const NNArtPolymer: new () => PolymerHTMLElement =
27+
PolymerElement({is: 'nn-art', properties: {}});
2928

3029
class NNArt extends NNArtPolymer {
3130
private cppn: CPPN;
@@ -48,35 +47,37 @@ class NNArt extends NNArtPolymer {
4847

4948
const currentColorElement =
5049
this.querySelector('#colormode') as HTMLInputElement;
51-
this.querySelector('#color-selector')!.addEventListener(
52-
// tslint:disable-next-line:no-any
53-
'click', (event: any) => {
54-
const colorMode =
55-
(event.target as HTMLElement).getAttribute('data-val') as
56-
ColorMode;
57-
currentColorElement.value = colorMode;
58-
this.cppn.setColorMode(colorMode);
59-
});
50+
this.querySelector('#color-selector')
51+
.addEventListener(
52+
// tslint:disable-next-line:no-any
53+
'click', (event: any) => {
54+
const colorMode =
55+
(event.target as HTMLElement).getAttribute('data-val') as
56+
ColorMode;
57+
currentColorElement.value = colorMode;
58+
this.cppn.setColorMode(colorMode);
59+
});
6060
this.cppn.setColorMode('rgb');
6161

6262
const currentActivationFnElement =
6363
this.querySelector('#activation-fn') as HTMLInputElement;
64-
this.querySelector('#activation-selector')!.addEventListener(
65-
// tslint:disable-next-line:no-any
66-
'click', (event: any) => {
67-
const activationFn =
68-
(event.target as HTMLElement).getAttribute('data-val') as
69-
ActivationFunction;
70-
currentActivationFnElement.value = activationFn;
71-
this.cppn.setActivationFunction(activationFn);
72-
});
64+
this.querySelector('#activation-selector')
65+
.addEventListener(
66+
// tslint:disable-next-line:no-any
67+
'click', (event: any) => {
68+
const activationFn =
69+
(event.target as HTMLElement).getAttribute('data-val') as
70+
ActivationFunction;
71+
currentActivationFnElement.value = activationFn;
72+
this.cppn.setActivationFunction(activationFn);
73+
});
7374
this.cppn.setActivationFunction('tanh');
7475

7576
const layersSlider =
7677
this.querySelector('#layers-slider') as HTMLInputElement;
7778
const layersCountElement =
7879
this.querySelector('#layers-count') as HTMLDivElement;
79-
layersSlider!.addEventListener('input', (event) => {
80+
layersSlider.addEventListener('input', (event) => {
8081
// tslint:disable-next-line:no-any
8182
this.numLayers = parseInt((event as any).target.value, 10);
8283
layersCountElement.innerText = '' + this.numLayers;

0 commit comments

Comments
 (0)