前言
本文主要收集一些常用和不常用的ts类型(不定期更新)
可以说只要类型推断写的好,sql语句结果的类型也是能推断出来的
字符串类型工具
/**
* 分割
* Split<'A,B,C',','> = 'A' | 'B' | 'C';
*/
type Split<S extends string, C extends string> = S extends `${infer A}${C}${infer B}`
? Split<A, C> | Split<B, C>
: S;
/**
* 组合
* Combination<'a' | 'b','a' | 'b'> = 'a' | 'b' | 'a b' | 'b a'
*/
type Combination<T, V = T> = T extends infer A
? A extends string
? Exclude<V, A> extends never
? A
: `${A} ${Combination<Exclude<V, A>, Exclude<V, A>>}` | Combination<Exclude<V, A>, Exclude<V, A>>
: never
: never;
/**
* 移除空格
*/
type TrimStart<T extends string> = T extends ` ${infer A}` ? A : T;
/**
* 移除空格
*/
type TrimEnd<T extends string> = T extends `${infer A} ` ? A : T;
/**
* 'AbcDe' => 'abc de'
*/
type ToWord<T extends string> = T extends `${infer A}${infer B}`
? Capitalize<A> extends A
? ` ${Trim<Uncapitalize<A>>}${ToWord<B>}`
: `${A}${ToWord<B>}`
: T;
数据空判断
export const isEmpty = (obj: any): obj is undefined | 'undefined' | null | '' => {
return obj === undefined || obj === null || obj === 'undefined' || obj === '';
};
export const isNull = (obj: any): obj is null | undefined => {
return obj === undefined || obj === null;
};
type NonEmptyable<T> = T extends undefined | 'undefined' | null | '' ? never : T;
export const isNotEmpty = <T extends any>(obj: T): obj is NonEmptyable<T> => {
return obj !== undefined && obj !== null && obj !== 'undefined' && obj !== '';
};
export const isNotNull = <T>(obj: T): obj is NonNullable<T> => {
return !isNull(obj);
};
其他
/**
* A | B => A & B
*/
export type OrToAnd<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;