Add parameter types where possible
authorTim Düsterhus <duesterhus@woltlab.com>
Fri, 30 Oct 2020 11:11:33 +0000 (12:11 +0100)
committerTim Düsterhus <duesterhus@woltlab.com>
Fri, 30 Oct 2020 11:33:41 +0000 (12:33 +0100)
wcfsetup/install/files/ts/WoltLabSuite/Core/Dictionary.ts
wcfsetup/install/files/ts/WoltLabSuite/Core/Dom/Traverse.ts
wcfsetup/install/files/ts/WoltLabSuite/Core/Ui/Acl/Simple.ts
wcfsetup/install/files/ts/WoltLabSuite/Core/Ui/Page/Search/Input.ts
wcfsetup/install/files/ts/WoltLabSuite/Core/Ui/TabMenu.ts
wcfsetup/install/files/ts/WoltLabSuite/Core/Ui/TabMenu/Simple.ts
wcfsetup/install/files/ts/WoltLabSuite/Core/Ui/User/Search/Input.ts

index be316efbe8c550d58f58d63f8e5e7e5a5853db71..52f542aea18ff0309160c7aba3cab85304a5821b 100644 (file)
  */
 
 /** @deprecated 5.4 Use a `Map` instead. */
-class Dictionary {
-  private readonly _dictionary = new Map<number | string, any>();
+class Dictionary<T> {
+  private readonly _dictionary = new Map<number | string, T>();
 
   /**
    * Sets a new key with given value, will overwrite an existing key.
    */
-  set(key: number | string, value: any): void {
+  set(key: number | string, value: T): void {
     this._dictionary.set(key.toString(), value);
   }
 
@@ -49,7 +49,7 @@ class Dictionary {
    * Iterates over the dictionary keys and values, callback function should expect the
    * value as first parameter and the key name second.
    */
-  forEach(callback: (value: any, key: string) => void): void {
+  forEach(callback: (value: T, key: number | string) => void): void {
     if (typeof callback !== "function") {
       throw new TypeError("forEach() expects a callback as first parameter.");
     }
@@ -60,7 +60,7 @@ class Dictionary {
   /**
    * Merges one or more Dictionary instances into this one.
    */
-  merge(...dictionaries: Dictionary[]): void {
+  merge(...dictionaries: Dictionary<T>[]): void {
     for (let i = 0, length = dictionaries.length; i < length; i++) {
       const dictionary = dictionaries[i];
 
@@ -83,7 +83,7 @@ class Dictionary {
    * All properties that are owned by the object will be added
    * as keys to the resulting Dictionary.
    */
-  static fromObject(object: object): Dictionary {
+  static fromObject(object: object): Dictionary<any> {
     const result = new Dictionary();
 
     for (const key in object) {
index 8c76750f515bafa3487047b56b29bd41578e7e56..a44e689f872f023e03f814426e0d0e16f1002a80 100644 (file)
@@ -96,7 +96,7 @@ export function childByTag(element: Element, tagName: string): Element | null {
 /**
  * Examines child elements and returns all children matching the given selector.
  */
-export function childrenBySel(element, selector: string): Element[] {
+export function childrenBySel(element: Element, selector: string): Element[] {
   return _getChildren(element, Type.Selector, selector);
 }
 
index 1005e774824273b23d8717ef320f9a34930aed14..ece28082bd3f24894af0609c43d2e4786393656a 100644 (file)
@@ -35,12 +35,15 @@ class UiAclSimple {
       excludedSearchValues.push(label.textContent!);
     });
 
-    this.searchInput = new UiUserSearchInput(document.getElementById(this.prefix + "aclSearchInput"), {
-      callbackSelect: this.select.bind(this),
-      includeUserGroups: true,
-      excludedSearchValues: excludedSearchValues,
-      preventSubmit: true,
-    });
+    this.searchInput = new UiUserSearchInput(
+      document.getElementById(this.prefix + "aclSearchInput") as HTMLInputElement,
+      {
+        callbackSelect: this.select.bind(this),
+        includeUserGroups: true,
+        excludedSearchValues: excludedSearchValues,
+        preventSubmit: true,
+      }
+    );
 
     this.aclListContainer = document.getElementById(this.prefix + "aclListContainer")!;
 
index f027992a8a66832b837abe28ec0c26abaaa11428..baefcd8f533bc2d69bdc0157c6ed0c3cc90bc4b5 100644 (file)
@@ -58,7 +58,7 @@ class UiPageSearchInput extends UiSearchInput {
     return data;
   }
 
-  _ajaxSuccess(data): void {
+  _ajaxSuccess(data: DatabaseObjectActionResponse): void {
     this.callbackSuccess(data);
   }
 }
index 50ce3a3b10d6ac02490b3c28aec95a82ab7f75f1..ffd3b1ef6331bcb58a0de3c92fd14ef5618d23bb 100644 (file)
@@ -23,7 +23,7 @@ const _tabMenus = new Map<string, TabMenuSimple>();
  * Initializes available tab menus.
  */
 function init() {
-  document.querySelectorAll(".tabMenuContainer:not(.staticTabMenuContainer)").forEach((container) => {
+  document.querySelectorAll(".tabMenuContainer:not(.staticTabMenuContainer)").forEach((container: HTMLElement) => {
     const containerId = DomUtil.identify(container);
     if (_tabMenus.has(containerId)) {
       return;
index 0f5230084fd0e948904191226473d969e01ec32f..ffe29675a50ede26388da4886017e6dc0a09c632 100644 (file)
@@ -19,7 +19,7 @@ class TabMenuSimple {
   private store: HTMLInputElement | null = null;
   private readonly tabs = new Map<string, HTMLLIElement>();
 
-  constructor(container) {
+  constructor(container: HTMLElement) {
     this.container = container;
   }
 
index 1ac8818fcdcd638abf4deca9de545389a29a3e81..8385d1dbe4692ab9128bd5d37b06efdc89555342 100644 (file)
@@ -9,10 +9,11 @@
  */
 
 import * as Core from "../../../Core";
+import { SearchInputOptions } from "../../Search/Data";
 import UiSearchInput from "../../Search/Input";
 
 class UiUserSearchInput extends UiSearchInput {
-  constructor(element, options) {
+  constructor(element: HTMLInputElement, options: UserSearchInputOptions) {
     const includeUserGroups = Core.isPlainObject(options) && options.includeUserGroups === true;
 
     options = Core.extend(
@@ -56,3 +57,7 @@ interface UserListItemData extends FirstArgument<UiSearchInput["createListItem"]
   type: "user" | "group";
   icon: string;
 }
+
+interface UserSearchInputOptions extends SearchInputOptions {
+  includeUserGroups?: boolean;
+}