diff --git a/source/index.ts b/source/index.ts index 3d96809..f819d82 100644 --- a/source/index.ts +++ b/source/index.ts @@ -66,6 +66,10 @@ const objectTypeNames = [ type ObjectTypeName = typeof objectTypeNames[number]; +function isObjectTypeName(name: unknown): name is ObjectTypeName { + return objectTypeNames.includes(name as ObjectTypeName); +} + const primitiveTypeNames = [ 'null', 'undefined', @@ -100,9 +104,14 @@ function isOfType(type: PrimitiveTypeName | 'fun const {toString} = Object.prototype; const getObjectType = (value: unknown): ObjectTypeName | undefined => { - const objectName = toString.call(value).slice(8, -1); - if (objectName) { - return objectName as ObjectTypeName; + const objectTypeName = toString.call(value).slice(8, -1); + + if (/HTML\w+Element/.test(objectTypeName) && is.domElement(value)) { + return 'HTMLElement'; + } + + if (isObjectTypeName(objectTypeName)) { + return objectTypeName; } return undefined; diff --git a/test/test.ts b/test/test.ts index bd62afc..98db7be 100644 --- a/test/test.ts +++ b/test/test.ts @@ -1275,19 +1275,19 @@ test('is.domElement', t => { assert.domElement({nodeType: 1, nodeName: 'div'}); }); - const htmlTagNameToTypeName = { - div: 'HTMLDivElement', - input: 'HTMLInputElement', - span: 'HTMLSpanElement', - img: 'HTMLImageElement', - canvas: 'HTMLCanvasElement', - script: 'HTMLScriptElement' - }; + const tagNames = [ + 'div', + 'input', + 'span', + 'img', + 'canvas', + 'script' + ]; - for (const [tagName, typeName] of Object.entries(htmlTagNameToTypeName)) { + tagNames.forEach(tagName => { const domElement = createDomElement(tagName); - t.is(is(domElement), typeName); - } + t.is(is(domElement), 'HTMLElement'); + }); }); test('is.observable', t => {