Skip to content

Commit

Permalink
feat: work hard
Browse files Browse the repository at this point in the history
  • Loading branch information
niaogege committed Sep 14, 2023
1 parent 0eb8b7c commit 3559eba
Show file tree
Hide file tree
Showing 3 changed files with 90 additions and 0 deletions.
1 change: 1 addition & 0 deletions docs/interview/experiences/14.202308handwriting.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ nav:
* 33.使用睡眠函数实现红绿灯代码,红灯2秒,黄灯1秒,绿灯3秒,循环改变颜色。
* 34.[1s后输出1 2s后输出2 3s后输出3](https://juejin.cn/post/6920492226594373639?searchId=20230828231941247DD0C17D7CAD3D5286)
* 35.TS手写联合转交叉
* 36.TS实现内置函数Parameters和ReturnTypes
*/
```

Expand Down
85 changes: 85 additions & 0 deletions docs/interview/practise/0912.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,88 @@
* 4.联合转交叉
* 5.索引转联合
*/

type UU = {
age: number;
name: string;
};

type IndexToUnion<T> = {
[P in keyof T]: {
[K in P]: T[K];
};
}[keyof T];
type UU2 = IndexToUnion<UU>;

type UU3 =
| {
age: number;
}
| {
name: string;
};

type UnionToIndex<T> = (T extends T ? (x: T) => unknown : never) extends (x: infer R) => unknown
? R
: never;

type UUION<T> = (T extends T ? (x: T) => unknown : never) extends (x: infer R) => unknown
? R
: never;

function GetName(name: string): string {
return name;
}

type MyParameters<T extends (...args: any) => any> = T extends (...args: infer P) => any
? P
: never;

type Parameters<T extends (...args: any) => any> = T extends (...args: infer P) => any ? P : never;

type MyReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R
? R
: never;

type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;

type FnGetParam = MyParameters<typeof GetName>; // [name: string]
type FnGetReturn = MyReturnType<typeof GetName>; // string
type UU4 = UnionToIndex<UU3>;

type T631 = '1' | '2' | '3';
type UnionToTuple<T extends unknown, R extends unknown[] = []> = T extends string ? [T] : R;
type T632 = UnionToTuple<T631>;

type GetReturnType<Func extends Function> = Func extends (...args: any[]) => infer ReturnType
? ReturnType
: never;

import { useEffect, useState } from 'react';
const useIntersectionObserver = ({ ref, option }) => {
const [visible, setVisible] = useState(false);
useEffect(() => {
const observer = new IntersectionObserver(([entry]) => {
setVisible(entry.isIntersecting);
});
if (ref.current) {
observer.observe(ref.current);
}
return () => {
observer.unobserve(ref.current);
};
}, []);
return visible;
};

function requestIdleCallback(cb) {
var start = Date.now();
return setTimeout(() => {
cb({
didTimeout: false,
timeRemaining: function () {
return Math.max(0, 50 - (Date.now() - start));
},
});
}, 0);
}
4 changes: 4 additions & 0 deletions docs/interview/practise/0913.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
/**
* 1. TS手写联合转交叉
* 2.TS实现内置函数Parameters和ReturnTypes
*/

0 comments on commit 3559eba

Please sign in to comment.