PrimitiveType
The primitive types including number, string, boolean, undefined, null, bigint, and symbol
Added in v0.0.1
Source
export type PrimitiveType =
| undefined
| null
| number
| string
| boolean
| bigint
| symbolNumberString
A string composed of numbers.
Added in v0.0.1
Source
export type NumberString = `${number}`PseudoArray
疑似配列(Pseudo-array)とは、数値型の length プロパティを持つオブジェクトであり、配列のようなオブジェクト(Array-like Object)とも呼ばれます。
Added in v0.0.3
Source
export type PseudoArray = object & { length: number }ObjectLike
Non-function object.
Added in v0.0.1
Source
export type ObjectLike = object & { call?: never; [x: PropertyKey]: any }ExtractUnion
Extract a union type from a tuple.
Added in v0.0.1
Source
export type ExtractUnion<T extends readonly string[]> = {
[K in keyof T]: T[K]
}[number]KeyOrIndex
Extracts a number from a string in the form of [${number}] or ${number}. Otherwise, returns the original string.
Added in v0.0.1
Source
export type KeyOrIndex<T extends string> = T extends
| `[${infer D extends number}]`
| `${infer D extends number}`
? D
: TTail
Returns the last element of tuple type.
Added in v0.0.1
Source
export type Tail<T extends readonly any[]> = T extends readonly [
...any[],
infer L
]
? L
: neverHead
Returns the first element of tuple type.
Added in v0.0.1
Source
export type Head<T extends readonly any[]> = T extends readonly [
infer L,
...any[]
]
? L
: neverEdge
Retrieve the first or last element of tuple T, determined by type D.
Added in v0.0.1
Source
export type Edge<
T extends readonly any[],
D = 'left' | 'right'
> = D extends 'left' ? Head<T> : Tail<T>EdgeReverse
Similar to Edge, but the effects of 'left' and 'right' for D are reversed.
Added in v0.0.1
Source
export type EdgeReverse<
T extends readonly any[],
D = 'left' | 'right'
> = D extends 'right' ? Head<T> : Tail<T>EmptyOrParameters
Returns the parameter types of the function; if the input is not a function, returns the never[] type.
Added in v0.0.1
Source
export type EmptyOrParameters<T> = T extends (...args: any[]) => any
? Parameters<T>
: never[]EmptyOrReturnType
Returns the return type of the function; if the input is not a function, returns the void type.
Added in v0.0.1
Source
export type EmptyOrReturnType<T> = T extends (...args: any[]) => any
? ReturnType<T>
: voidWithFallback
型 T の結果を返すか、結果が null または undefined の場合にデフォルト値の型 R を返します。
Added in v0.0.2
Source
export type WithFallback<T extends (...args: any[]) => any, R> =
ReturnType<T> extends undefined | null ? R : ReturnType<T>LiteralStringWithFallback
文字列型 T が広範囲(例えば string)の場合、この型はデフォルトの文字列値 R を提供します。
これは、構成オブジェクトやオプションのパラメータなどのシナリオで型の安全性を確保しながら、柔軟性も確保します。
Added in v0.0.2
Source
export type LiteralStringWithFallback<T extends string, R extends string> = T &
R extends never
? T
: RMappedTypeByKeyOrIndex
入力文字列/数値インデックス T に基づいて、平たく単純なオブジェクトまたは配列の型を生成し、そのインデックスが型 V を指し、型 O が値のオプション性を制御します。
Added in v0.0.2
Source
export type MappedTypeByKeyOrIndex<
T extends string,
V,
O extends boolean = false
> =
KeyOrIndex<T> extends string
? O extends false
? { [P in T]: V }
: { [P in T]?: V }
: O extends false
? unknown[] & { [P in KeyOrIndex<T>]: V }
: unknown[] & { [P in KeyOrIndex<T>]?: V }DeepMappedTypeByKeyOrIndex
フィールドパス T を再帰的に解析し、ネストされた平たく単純なオブジェクトまたは配列を作成します。"data.[0].name" のようなネストされたパス文字列を解釈し、パスの末端フィールドが値 V を指します。O が値がオプションかどうかを決定します。
これは、文字列テンプレートに基づいて複雑なネストされた型を作成するのに非常に役立ちます。
Added in v0.0.2
Source
export type DeepMappedTypeByKeyOrIndex<
T extends string,
V,
O extends boolean = false
> = T extends `[${infer Key extends number}][${infer Rest}`
? MappedTypeByKeyOrIndex<`${Key}`, DeepMappedTypeByKeyOrIndex<`[${Rest}`, V>>
: T extends `${infer Key}[${infer Rest}`
? MappedTypeByKeyOrIndex<
`${Key}`,
DeepMappedTypeByKeyOrIndex<`[${Rest}`, V>
>
: T extends `[${infer Key extends number}].${infer Rest}`
? MappedTypeByKeyOrIndex<`${Key}`, DeepMappedTypeByKeyOrIndex<Rest, V>>
: T extends `${infer Key}.${infer Rest}`
? MappedTypeByKeyOrIndex<`${Key}`, DeepMappedTypeByKeyOrIndex<Rest, V>>
: MappedTypeByKeyOrIndex<T, V, O>DataUnit
DataUnit 型は、デジタルデータの異なる単位を表します。
Added in v0.0.2
Source
export type DataUnit =
| 'bit'
| 'B'
| 'KB'
| 'MB'
| 'GB'
| 'TB'
| 'PB'
| 'EB'
| 'ZB'
| 'YB'Nullish
Nullish 型は、値が null または undefined の場合を表します。
Added in v0.0.4
Source
export type Nullish = undefined | nullSpreadSkipNullish
左から右に複数の型をマージして新しいオブジェクトの型を形成します。
先のオブジェクトの null または undefined でないフィールドは、後のオブジェクトの null または undefined のフィールドによって上書きされません。
Added in v0.0.4
Source
export type SpreadSkipNullish<T, U> = {
[K in keyof T | keyof U]: K extends keyof T
? K extends keyof U
? T[K] extends Nullish
? U[K]
: U[K] extends Nullish
? T[K]
: U[K]
: T[K]
: K extends keyof U
? U[K]
: never
}IsAny
IsAny 型は、型が any かどうかを判断するために使用されます。 T が any の場合、結果は true となり、そうでない場合は false となります。
Added in v0.0.4
Source
export type IsAny<T> = 0 extends 1 & T ? true : falseArrayIndexes
ArrayIndexes 型は、配列の要素のインデックスを取得するために使用されます(配列の一般的なプロパティ、例えば length は除きます)。
Added in v0.0.4
Source
export type ArrayIndexes<T extends any[]> = Exclude<
keyof T,
keyof any[] | 'length'
> &
(string | number)FieldPathComponent
FieldPathComponent 型は、フィールドのパスコンポーネントを生成するために使用されます。 Str が数字または数値文字列の場合、'[1]' のようなパスを生成し、文字列の場合には 'a' のようなパスを生成します。 次の型が普通のオブジェクトか配列かによって、最後に '.' を追加するかどうかが決まります。
Added in v0.0.4
Source
export type FieldPathComponent<
Str extends string | number,
Next extends 'object' | 'array' | void = void
> = Str extends NumberString | number
? Next extends 'object'
? `[${Str & (string | number)}].`
: `[${Str & (string | number)}]`
: Next extends 'object'
? `${Str & string}.`
: `${Str & string}`FlattenArrayObject
FlattenArrayObject 型は、配列内のオブジェクトを連合型にフラット化するために使用されます。これは、配列内の各要素を再帰的に処理し、要素の型(オブジェクトまたは配列)に応じてフラット化を続けます。
Added in v0.0.4
Source
export type FlattenArrayObject<
T extends Array<any>,
Prefix extends string = ''
> = {
[K in number | ArrayIndexes<T>]: IsAny<T[K]> extends true
? { [P in `${Prefix}${FieldPathComponent<K>}`]: T[K] }
: T[K] extends never
? never
: T[K] extends object
? T[K] extends Array<any>
? FlattenArrayObject<
T[K],
`${Prefix}${FieldPathComponent<K, 'array'>}`
>
: FlattenObject<T[K], `${Prefix}${FieldPathComponent<K, 'object'>}`>
: { [P in `${Prefix}${FieldPathComponent<K>}`]: T[K] }
}[ArrayIndexes<T> | number]FlattenObject
FlattenObject 型は、オブジェクトを連合型にフラット化するために使用されます。これは、オブジェクトの各フィールドを再帰的に処理し、フィールドの型(オブジェクトまたは配列)に応じてフラット化を続けます。
Added in v0.0.4
Source
export type FlattenObject<T, Prefix extends string = ''> = {
[K in keyof T & string]: IsAny<T[K]> extends true
? { [P in `${Prefix}${FieldPathComponent<K>}`]: T[K] }
: T[K] extends never
? never
: T[K] extends object
? T[K] extends Array<any>
? FlattenArrayObject<
T[K],
`${Prefix}${FieldPathComponent<K, 'array'>}`
>
: FlattenObject<T[K], `${Prefix}${FieldPathComponent<K, 'object'>}`>
: { [P in `${Prefix}${FieldPathComponent<K>}`]: T[K] }
}[keyof T & string]UnionToIntersection
UnionToIntersection 型は、連合型を交叉型に変換するために使用されます。例えば、A | B は A & B に変換されます。
Added in v0.0.4
Source
export type UnionToIntersection<U> = (
U extends any ? (x: U) => any : never
) extends (x: infer R) => any
? R
: neverIntersectionToObject
IntersectionToObject 型は、交叉型をオブジェクト型に変換するために使用されます。例えば、A & B は { [K in keyof (A & B)]: (A & B)[K] } に変換されます。
Added in v0.0.4
Source
export type IntersectionToObject<U> = {
[K in keyof UnionToIntersection<U>]: UnionToIntersection<U>[K]
}FlattenNestObject
FlattenNestObject 型は、ネストされたオブジェクトを新しいオブジェクト型にフラット化するために使用されます。まず、FlattenObject を使用してオブジェクトを連合型にフラット化し、次に UnionToIntersection を使用して連合型を交叉型に変換し、最後に IntersectionToObject を使用して交叉型をオブジェクト型に変換します。
Added in v0.0.4
Source
export type FlattenNestObject<T extends object> = IntersectionToObject<
UnionToIntersection<FlattenObject<T>>
>