type FillZero<T extends string> = T extends `.${any}` ? `0${T}` : T;
type Split<T extends string> = T extends `-${infer Rest}`
? ["-", FillZero<Rest>]
: ["", FillZero<T>];
type Trunc<T extends string | number> = Split<`${T}`>[1] extends `${infer Head}.${any}` ? `${Split<`${T}`>[0]}${Head}` : `${T}`
Solution by sunupupup #33414
Hahaha, look what I created!
type Trunc<T extends string | number, C extends string = ''> = `${T}` extends `${infer L}${infer R}`
? L extends '.'
? C extends ''
? '0'
: C
: R extends '' ? `${C}${L}` : Trunc<R, `${C}${L}`>
: T
Solution by tototi5997 #33242
// your answers
type Trunc<T extends string | number> = `${T}` extends `${infer U}.${infer _}` ? (U extends "" ? "0" : U) : `${T}`;
Solution by pea-sys #33100
type GetIntegerFromString<T extends string> = T extends ""
? '0'
: T
type Trunc<N extends string | number> = `${N}` extends `${infer I}.${number}`
? GetIntegerFromString<I>
: `${N}`
Solution by keyurparalkar #32468
type Trunc<T extends string | number> = `${T}` extends `${infer L}.${infer _}` ? (L extends "" ? "0" : L) : `${T}`;
Solution by gasmg #32235
type Trunc<U extends number|string, T = `${U}`> = T extends `${infer L}.${infer R}` ? L extends "" ? '0' : L : T
Solution by Zhen-code #32029
type Trunc<T extends number | string> = `${T}` extends `${infer N}.${any}` ? N : `${T}`
Solution by MyeonghoonNam #31581
type Trunc<T extends string | number> =
`${T}` extends `${infer S}.${string}`
? `${S extends '' ? 0 : S}`
: `${T}`
Solution by matallui #30810
type Dot = ".";
type Trunc<T extends string | number> =
`${T}` extends `${infer First}${Dot}${any}`
? First extends ""
? "0"
: First
: `${T}`;
Solution by WanderedToLa #30742
type Trunc<T extends string | number> =
`${T}` extends `${infer Num}.${string}` ?
Num extends '' ? '0' : Num
: `${T}`
Solution by jjswifty #30272
// your answers
// Equal<F, ''> extends true处理'.3'这个case
type Trunc<T extends string | number> = `${T}` extends `${infer F}.${infer R}`
? Equal<F, ''> extends true
? '0'
: F
: `${T}`
Solution by bebusy007 #30022
// your answers
type Trunc<T> = T extends `${infer First}.${infer Rest}`? First: never
Solution by kerolossamir165 #29862
type Trunc<N extends number | string> = `${N}` extends `${infer T}.${infer _}`
? T extends ""
? "0"
: T
: `${N}`;
Solution by idebbarh #29853
type ToNumber<T extends string, R extends any[] = []> = `${R['length']}` extends T ?
R['length']: ToNumber<T, [...R, 0]>;
type Trunc<T extends number> = `${T}` extends `${infer A}.${infer B}` ?
ToNumber<A>: T;
type trunc = Trunc<123.456>;
const tr: trunc = 123;
Solution by sundial-dreams #29547
type Trunc<T extends string | number> = T extends number
? Trunc<`${T}`>
: T extends `${infer S}.${string}`
? S extends ""
? "0"
: S
: T
Solution by dmytro-shumak #29375
type Trunc<T extends number | string> = `${T}` extends `${infer Head}.${string}`
? `${Head}`
: `${T}`
Solution by Kying-star #29040
type Trunc<T extends string | number> =
`${T}` extends `${infer Int}.${infer Float}`
? Int extends ""
? "0"
: Int
: `${T}`;
Solution by DoubleWoodLin #28778
// your answers
type Fill0<T extends string | number> = `${T}` extends `.${infer R}` ? `0.${R}` : `${T}`
type Trunc<T extends string | number> = Fill0<T> extends `${infer L}.${any}`
? L
: `${T}`
Solution by GreattitJY #28157
type Trunc<T extends number | string> = T extends number
? ExtractIntegerPart<`${T}`>
: T extends string
? ExtractIntegerPart<T>
: never
type ExtractIntegerPart<T extends string> = T extends string
? T extends `${infer F}.${infer R}`
? F extends ''
? '0'
: F
: T
: never
Solution by jazelly #27892
type Trunc<T extends string | number> = `${T}` extends `${infer Int}.${any}` ? Int extends '' ? '0' : Int : `${T}`
Solution by jiechliu #27727
// your answers
type Trunc<T extends number> = `${T}` extends `${infer S extends number}.${any}` ? S : T;
Solution by Hencky #27637
type HandleEmptyStr<Res> = Res extends "" ? "0" : Res;
type Trunc<N extends number | string> = HandleEmptyStr<
`${N}` extends `${infer First}.${string}` ? First : `${N}`
>;
Solution by alythobani #27609
type Trunc<T extends number | string> = `${T}` extends `${infer R}.${infer _}`
? R
: `${T}`;
Solution by ryuji-1to #27367
type Trunc<T extends string | number> = `${T}` extends `${infer L}.${infer _}` ? L extends '' ? '0' : L : `${T}`
Solution by smileboyi #27106
// your answers
type Trunc<T extends number | string> =
`${T}` extends `.${infer X}`
? '0'
: `${T}` extends `${infer H}.${infer R}`
? H
: `${T}`
Solution by kiki-zjq #25668
'. 3' needs to be considered
// your answers
type Trunc<T extends number | string> = `${T}` extends `${infer N}.${any}`
? N extends ""
? "0"
: N
: `${T}`;
// Expect<Equal<Trunc<'.3'>, '0'>>
Solution by DvYinPo #25610
notice: need return number, most answer ignore this
type ToNumber<T> = T extends `${infer N extends number}`
? N
: T
type Trunc<T extends string | number> = `${T}` extends `${infer P}.${infer Q}` ? ToNumber<P> : ToNumber<T>;
Solution by echizen #24667
type Trunc<T extends string | number> = `${T}` extends `${infer Start}${'.'}${string}`
? Start
: `${T}`
Solution by NeylonR #24271
// your answers
type Trunc<T extends number | string> = `${T}` extends `${infer Left}.${infer Right}` ? Left : `${T}`
Solution by studymachiney #24112
type Trunc<T extends number | `${number}`> = `${T}` extends `${infer I}.${any}` ? I extends `` ? `0` : I : `${T}`;
// old way
// type Trunc<T extends number | string> = T extends string ?
// (
// T extends `${infer R}.${any}` ?
// R :
// T
// ) :
// Trunc<`${T}`>;
Solution by E-uler #23984