[Typescript] DOMNodeExtractorConfig
2023-09-14 09:00:42 时间
import { it } from 'vitest';
import { Equal, Expect } from '../helpers/type-utils';
export const isDivElement = (element: unknown): element is HTMLDivElement => {
return element instanceof HTMLDivElement;
};
export const isBodyElement = (element: unknown): element is HTMLBodyElement => {
return element instanceof HTMLBodyElement;
};
interface DOMNodeExtractorConfig<T, Result> {
isNode: (node: unknown) => node is T;
transform: (node: T) => Result;
}
const createDOMNodeExtractor = <T, TResult>(
config: DOMNodeExtractorConfig<T, TResult>
) => {
return (nodes: unknown[]): TResult[] => {
return nodes.filter(config.isNode).map(config.transform);
};
};
it('Should pick up that "extractDivs" is of type "HTMLDivElement[]"', () => {
const extractDivs = createDOMNodeExtractor({
isNode: isDivElement,
transform: (div) => {
type test1 = Expect<Equal<typeof div, HTMLDivElement>>;
return div.innerText;
},
});
const divs = extractDivs([document.createElement('div')]);
type test2 = Expect<Equal<typeof divs, string[]>>;
});
it('Should pick up that "extractBodies" is of type "HTMLBodyElement[]"', () => {
const extractBodies = createDOMNodeExtractor({
isNode: isBodyElement,
transform: (body) => {
type test1 = Expect<Equal<typeof body, HTMLBodyElement>>;
return body.bgColor;
},
});
const bodies = extractBodies([document.createElement('body')]);
type test2 = Expect<Equal<typeof bodies, string[]>>;
});
相关文章
- typescript 中使用 setTimeout 返回值类型 eslint 检查错误 ‘NodeJS‘ is not defined.eslint(no-undef)
- 浅谈TypeScript泛型T和any的区别
- typescript 多继承_说明类的继承和多态有什么作用
- Typescript教程_安装typescript
- 前端 QA 工具链指南 - husky,commitlint,commitizen,eslint,typescript,express
- Getting Started: Ionic + Capacitor + React + Typescript + Android
- 【TypeScript】中的数组和元组之间的关系
- 【TypeScript】的安装方式
- 【项目总结】TypeScript基础
- 【工程搭建】从零搭建一个 typescript + express + eslint 工程
- Vue 3 + Typescript + Vite 基个人网站二维码登录功能
- Vue 3 + Typescript + Vite 基于jsplumb流程设计和流程流转
- TypeScript 中提升幸福感的 10 个高级技巧
- Webpack搭建简单的TypeScript脚手架
- TypeScript 4.4 RC 发布