diff --git a/src/dom-wrapper.ts b/src/dom-wrapper.ts index e095c7d80..723e3521b 100644 --- a/src/dom-wrapper.ts +++ b/src/dom-wrapper.ts @@ -10,7 +10,9 @@ export class DOMWrapper { this.element = element } - classes(className?: string) { + classes(): string[] + classes(className: string): boolean + classes(className?: string): string[] | boolean { const classes = this.element.classList if (className) return classes.contains(className) @@ -18,12 +20,13 @@ export class DOMWrapper { return Array.from(classes) } - attributes(key?: string) { - const attributes = this.element.attributes - const attributeMap = {} - for (let i = 0; i < attributes.length; i++) { - const att = attributes.item(i) - attributeMap[att.localName] = att.value + attributes(): { [key: string]: string } + attributes(key: string): string + attributes(key?: string): { [key: string]: string } | string { + const attributes = Array.from(this.element.attributes) + const attributeMap: Record = {} + for (const attribute of attributes) { + attributeMap[attribute.localName] = attribute.value } return key ? attributeMap[key] : attributeMap diff --git a/src/vue-wrapper.ts b/src/vue-wrapper.ts index e4f0f6f4d..019ebae1d 100644 --- a/src/vue-wrapper.ts +++ b/src/vue-wrapper.ts @@ -45,16 +45,22 @@ export class VueWrapper { return this.componentVM } - props(selector?: string) { + props(): { [key: string]: any } + props(selector: string): any + props(selector?: string): { [key: string]: any } | any { const props = this.componentVM.$props as { [key: string]: any } return selector ? props[selector] : props } - classes(className?: string) { + classes(): string[] + classes(className: string): boolean + classes(className?: string): string[] | boolean { return new DOMWrapper(this.element).classes(className) } - attributes(key?: string) { + attributes(): { [key: string]: string } + attributes(key: string): string + attributes(key?: string): { [key: string]: string } | string { return new DOMWrapper(this.element).attributes(key) } diff --git a/test-dts/wrapper.d-test.ts b/test-dts/wrapper.d-test.ts index b71a50b68..0a2c12c84 100644 --- a/test-dts/wrapper.d-test.ts +++ b/test-dts/wrapper.d-test.ts @@ -86,3 +86,19 @@ expectType(line.element) // string selector byClass = domWrapper.get('.todo') expectType(byClass.element) + +// attributes +expectType<{ [key: string]: string }>(wrapper.attributes()) +expectType(wrapper.attributes('key')) +expectType<{ [key: string]: string }>(domWrapper.attributes()) +expectType(domWrapper.attributes('key')) + +// classes +expectType>(wrapper.classes()) +expectType(wrapper.classes('class')) +expectType>(domWrapper.classes()) +expectType(domWrapper.classes('class')) + +// props +expectType<{ [key: string]: any }>(wrapper.props()) +expectType(wrapper.props('prop'))