Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[TypeScript & Module Typing] 호프(김문희) 미션 제출합니다. #2

Merged
merged 47 commits into from
Sep 28, 2022
Merged
Show file tree
Hide file tree
Changes from 45 commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
a16772c
chore: 프로젝트 초기 환경을 설정한다.
moonheekim0118 Sep 20, 2022
a2be0d1
chore: jest 테스트 환경을 구축한다.
moonheekim0118 Sep 25, 2022
74bd4c7
chore: tsconfig 를 작성한다.
moonheekim0118 Sep 26, 2022
dbeda4e
chore: typeTest 경로 및 types, typings 경로를 지정한다.
moonheekim0118 Sep 26, 2022
cb17360
feat: util 함수에 대한 타입을 지정하고 구현한다.
moonheekim0118 Sep 26, 2022
5f90ba3
feat: HtmlElement 관련 util 에 대한 타입을 지정하고 구현한다.
moonheekim0118 Sep 26, 2022
24c0396
test: 타입 테스트 추가
moonheekim0118 Sep 26, 2022
277987d
feat: HtmlElement 관련 api 테스트를 추가한다.
moonheekim0118 Sep 26, 2022
48a9b26
chore: 기존의 테스트 파일을 제거한다.
moonheekim0118 Sep 26, 2022
3663096
build: 타입스크립트->자바스크립트, d.ts 로 컴파일한다.
moonheekim0118 Sep 26, 2022
3c8b318
refactor: 불필요한 주석을 제거한다.
moonheekim0118 Sep 26, 2022
10b5c68
refactor: 불필요한 자바스크립트 타입가드를 제거한다.
moonheekim0118 Sep 26, 2022
e8d8645
feat: clickOutside 함수를 구현한다.
moonheekim0118 Sep 26, 2022
f529df7
refactor: 주석 추가 및 메서드명을 수정한다.
moonheekim0118 Sep 26, 2022
7ae0e3f
refactor: 변경된 메서드명을 테스트파일에 반영한다.
moonheekim0118 Sep 26, 2022
91e28b9
refactor: 에러 메시지를 수정한다.
moonheekim0118 Sep 26, 2022
91b6b17
refactor: pick 함수 리팩터링 및 반복되는 타입을 분리한다.
moonheekim0118 Sep 26, 2022
314b513
refactor: 자주쓰이는 Function, Object 타입을 상수화하여 관리한다.
moonheekim0118 Sep 26, 2022
8591faa
refactor: nill 타입을 분리한다.
moonheekim0118 Sep 26, 2022
29a8c18
refactor: throttle 타입을 수정한다.
moonheekim0118 Sep 26, 2022
9a4f71f
feat: fetch 함수 타입을 지정한다.
moonheekim0118 Sep 26, 2022
3927324
refactor: Nill 타입을 유틸타입으로 분리한다.
moonheekim0118 Sep 26, 2022
d342714
refactor: let 을 const 로 수정한다.
moonheekim0118 Sep 26, 2022
abc6f78
refactor: util 타입을 분리한다.
moonheekim0118 Sep 26, 2022
bd2f8cd
build: 변경된 사항을 빌드한다.
moonheekim0118 Sep 26, 2022
d752c5d
test: fetch 에 대한 테스트 코드를 작성하고, pick 과 omit 에 대한 테스트를 수정한다.
moonheekim0118 Sep 26, 2022
9286dea
chore: type test script 명령어를 추가한다.
moonheekim0118 Sep 26, 2022
f9525d1
chore: build script 명령어를 추가한다.
moonheekim0118 Sep 26, 2022
5cbc5df
refactor: 중복된 타입을 제거한다.
moonheekim0118 Sep 26, 2022
cdd880b
refactor: 불필요한 package 설정을 제거한다.
moonheekim0118 Sep 26, 2022
4326fb8
test: api 테스트를 추가한다.
moonheekim0118 Sep 26, 2022
8bb2c3e
test: tsd 테스트를 jest 테스트로 수정한다.
moonheekim0118 Sep 26, 2022
87f8b17
refactor: 빌드 폴더 이름을 수정한다
moonheekim0118 Sep 26, 2022
9f2eff0
feat: debounce 함수에 대한 테스트 및 구현을 작성한다.
moonheekim0118 Sep 26, 2022
e2ccdb7
feat: throttle 함수에 대한 테스트 및 구현을 작성한다.
moonheekim0118 Sep 26, 2022
631153c
refacotr: GetArgumentsTypeByIndex 유틸타입을 추가하고 적용한다.
moonheekim0118 Sep 26, 2022
fa919a3
fix typo
moonheekim0118 Sep 26, 2022
f72f14d
test: 변경된 테스트를 반영한다.
moonheekim0118 Sep 26, 2022
9564d16
refactor: 함수 타입을 수정한다.
moonheekim0118 Sep 27, 2022
df78d8a
refactor: 함수와 객체 타입의 이름을 수정한다.
moonheekim0118 Sep 27, 2022
3486c3b
test: clickOutside 함수에 대한 타입테스트를 추가한다.
moonheekim0118 Sep 27, 2022
47a2007
chore: gitignore 수정한다.
moonheekim0118 Sep 27, 2022
232cf41
refactor: element 타입을 HTMLElement 로 강제하여 타입 단언을 제거한다.
moonheekim0118 Sep 27, 2022
b1f0e46
refactor: 불필요한 타입단언을 제거한다.
moonheekim0118 Sep 27, 2022
d23c58c
chore: 빌드된 결과물 제거
moonheekim0118 Sep 28, 2022
dc99edc
refactor: 불필요한 유틸타입을 제거한다. 흑흑
moonheekim0118 Sep 28, 2022
3a35b8b
refactor: SoundObject 의 key 타입을 수정한다. number 와 symbol 도 받도록 수정한다.
moonheekim0118 Sep 28, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
node_modules
Reference.md
68 changes: 48 additions & 20 deletions __tests__/api.test.ts
Original file line number Diff line number Diff line change
@@ -1,39 +1,67 @@
/**
* @jest-environment jsdom
*/
import _ from '../src';
import _ from "../src";

test('모듈은 기본 내보내기', () => {
expect(_).toBeTruthy();
test("모듈은 기본 내보내기", () => {
expect(_).toBeTruthy();
});

test('모듈에 포함된 함수 확인', () => {
expect(typeof _.fetch).toBe('function');
test("모듈에 포함된 함수 확인", () => {
expect(typeof _.fetch).toBe("function");
});

test('모듈에 포함된 함수 확인', () => {
expect(typeof _.pick).toBe('function');
test("모듈에 포함된 함수 확인", () => {
expect(typeof _.pick).toBe("function");
});

test('모듈에 포함된 함수 확인', () => {
expect(typeof _.omit).toBe('function');
test("모듈에 포함된 함수 확인", () => {
expect(typeof _.omit).toBe("function");
});

test('Selector 동작 확인', () => {
const divElement = document.createElement('div');
divElement.innerHTML = `<button class='test-btn'>Continue</button>`;
document.body.appendChild(divElement);
test("Selector 동작 확인", () => {
const divElement = document.createElement("div");
divElement.innerHTML = `<button class='test-btn'>Continue</button>`;
document.body.appendChild(divElement);

const buttonElement = _('button.test-btn');
expect(buttonElement).toBeTruthy();
const buttonElement = _("button.test-btn").element;
expect(buttonElement).toBeTruthy();
divElement.removeChild(buttonElement);
});

test("innerHTML 동작 확인", () => {
const divElement = document.createElement("div");
divElement.id = "target-div";
document.body.appendChild(divElement);

const myElement = _("#target-div");
myElement.innerHTML(`<button class='test-btn'>Continue</button>`);

const buttonElement = _("button.test-btn").element;

document.body.removeChild(buttonElement);
expect(buttonElement).toBeTruthy();
myElement.element.removeChild(buttonElement);
});

test('`_("").innerHTML()`~~~~', () => {});
test("show 동작 확인", () => {
const divElement = document.createElement("div");
divElement.id = "target-div";
document.body.appendChild(divElement);

test('`_("").show()`~~~~', () => {});
const myElement = _("#target-div");
myElement.element.style.display = "none";
myElement.show();

test('`_("").hidden()`~~~~', () => {});
expect(myElement.element.style.display).toBe("block");
});

test("hide 동작 확인", () => {
const divElement = document.createElement("div");
divElement.id = "target-div";
document.body.appendChild(divElement);

test('`_("").addEvent()`~~~~', () => {});
const myElement = _("#target-div");
myElement.hide();

expect(myElement.element.style.display).toBe("none");
});
98 changes: 91 additions & 7 deletions __tests__/type.test.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,94 @@
/**
* @jest-environment jsdom
*/
import { expectType } from 'tsd';
import _ from "../src";
import { expectType } from "tsd";
import {
DebouncedFunction,
DebounceThrottleOptions,
SoundFunction,
FetchOptions,
FetchResponse,
} from "../src/util";

import _ from '../src';
test("fetch 함수에 대한 타입을 체크한다.", () => {
// given
type TestData = {
id: number;
name: string;
age: number;
};

_('.button').addEvent('click', function (event) {
expectType<MouseEvent>(event);
expectType<
(url: string, options?: FetchOptions) => Promise<FetchResponse<TestData[]>>
>(_.fetch<TestData[]>);
});

test("isNull 함수에 대한 타입을 체크한다.", () => {
expectType<(value: any) => value is null>(_.isNull);
});

test("isNill 함수에 대한 타입을 체크한다.", () => {
expectType<(value: any) => value is null | undefined>(_.isNil);
});

test("isFunction 함수에 대한 타입을 체크한다.", () => {
expectType<(value: any) => value is (...args: any[]) => any>(_.isFunction);
});

test("shuffle 함수에 대한 타입을 체크한다.", () => {
expectType<(array: number[]) => number[]>(_.shuffle<number>);
});

test("pick 함수에 대한 타입을 체크한다.", () => {
// given
type testObj = { a: 1; b: 2; c: 3 };
type testPath = ["a", "b"];
type pickResultObj = { a: 1; b: 2 };

// then
expectType<(object: testObj, path: testPath) => pickResultObj>(
_.pick<testObj, testPath>
);
});

test("omit 함수에 대한 타입을 체크한다.", () => {
// given
type testObj = { a: 1; b: 2; c: 3 };
type testPath = ["a", "b"];
type OmitResultObj = { c: 3 };

// then
expectType<(object: testObj, path: testPath) => OmitResultObj>(
_.omit<testObj, testPath>
);
});

test("debounce 함수에 대한 타입을 체크한다.", () => {
// given
type testFun = SoundFunction<number>;

expectType<
(
func: testFun,
wait: 100,
options: DebounceThrottleOptions
) => DebouncedFunction<testFun>
>(_.debounce<testFun>);
});

test("throttle 함수에 대한 타입을 체크한다.", () => {
// given
type testFun = SoundFunction<number>;

expectType<
(
func: testFun,
wait: 100,
options: DebounceThrottleOptions
) => DebouncedFunction<testFun>
>(_.throttle<testFun>);
});

test("clickOutside 함수에 대한 타입을 체크한다.", () => {
expectType<(eventTarget: HTMLElement, innerElement: HTMLElement) => boolean>(
_.clickOutside
);
});
8 changes: 8 additions & 0 deletions jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
module.exports = {
preset: "ts-jest",
testEnvironment: "node",
transform: {
"^.+\\.ts?$": "ts-jest",
},
transformIgnorePatterns: ["<rootDir>/node_modules/"],
};
Loading