Skip to content

Commit 89ecafc

Browse files
author
贺子良
committed
💫 workflow(3-5):
1 parent 8e661bb commit 89ecafc

File tree

4 files changed

+73
-1
lines changed

4 files changed

+73
-1
lines changed

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,6 @@
3333
- /medium/529
3434
- /medium/531 *
3535
- /medium/599 *
36-
- /medium/610 *
36+
- /medium/610 *
37+
- /medium/612 ***
38+
- /medium/645 ?

medium/612-KebabCase.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/*
2+
* @Date: 2022-03-04
3+
* @Description:KebabCase
4+
*/
5+
//FooBarBaz -> foo-bar-baz
6+
7+
type Test = "FooBarBaz";
8+
9+
type KebabCase<T extends string> = T extends `${infer F}${infer R}`
10+
? `${Uncapitalize<F>}${R extends Uncapitalize<R> ? "" : "-"}${KebabCase<R>}`
11+
: Uncapitalize<T>;
12+
13+
type Result = KebabCase<Test>;
14+
15+
export {};
16+
17+
//>

medium/645-Diff.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*
2+
* @Date: 2022-03-05
3+
* @Description: Diff
4+
*/
5+
/**
6+
* Get an Object that is the difference between O & O1
7+
*/
8+
9+
type I1 = {
10+
name: string;
11+
};
12+
13+
type I2 = {
14+
name: string;
15+
age: number;
16+
id: number;
17+
};
18+
19+
type Diff<O, O1> = O1 extends O
20+
? {
21+
[K in Exclude<keyof O1, keyof O>]: O1[K];
22+
}
23+
: {
24+
[K in Exclude<keyof O, keyof O1>]: O[K];
25+
};
26+
27+
type Result = Diff<I1, I2>;
28+
29+
export {};

medium/949.Anyof.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/*
2+
* @Date: 2022-03-05
3+
* @Description: Anyof
4+
*/
5+
6+
type TFalsy = null | undefined | "" | false | [] | 0;
7+
8+
type AnyOf<T extends readonly any[]> = T["length"] extends 0
9+
? false
10+
: T extends [infer F, ...infer R]
11+
? keyof F extends never
12+
? false
13+
: F extends TFalsy
14+
? AnyOf<R>
15+
: true
16+
: false;
17+
18+
// keyof T extends never 代表空对象类型 {}
19+
20+
type Sample1 = AnyOf<[1, "", false, [], {}]>; // expected to be true.
21+
type Sample2 = AnyOf<[0, "", false, [], {}]>; // expected to be false.
22+
type Sample3 = AnyOf<[]>; // expected to be false.
23+
24+
export {};

0 commit comments

Comments
 (0)