Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion docs/ja/reference/compat/predicate/isFinite.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,5 @@ isFinite(undefined); // false

#### 戻り値

(`boolean`): 値が有限な数値の場合は`true`、そうでない場合は`false`を返します。
(`value is number`): 値が有限な数値の場合は`true`、そうでない場合は`false`を返します。
Comment thread
Yeom-JinHo marked this conversation as resolved.
`true`を返す場合、TypeScriptは`value`の型を`number`に絞り込みます。
3 changes: 2 additions & 1 deletion docs/ko/reference/compat/predicate/isFinite.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,5 @@ isFinite(undefined); // false

#### 반환 값

(`boolean`): 값이 유한한 숫자이면 `true`, 아니면 `false`를 반환해요.
(`value is number`): 값이 유한한 숫자이면 `true`, 아니면 `false`를 반환해요.
Comment thread
Yeom-JinHo marked this conversation as resolved.
`true`를 반환하면 TypeScript가 `value`의 타입을 `number`로 좁혀줘요.
3 changes: 2 additions & 1 deletion docs/reference/compat/predicate/isFinite.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,5 @@ isFinite(undefined); // false

#### Returns

(`boolean`): Returns `true` if the value is a finite number, otherwise `false`.
(`value is number`): Returns `true` if the value is a finite number, otherwise `false`.
When `true`, TypeScript narrows the type of `value` to `number`.
3 changes: 2 additions & 1 deletion docs/zh_hans/reference/compat/predicate/isFinite.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,5 @@ isFinite(undefined); // false

#### 返回值

(`boolean`): 如果值是有限数字则返回 `true`,否则返回 `false`。
(`value is number`): 如果值是有限数字则返回 `true`,否则返回 `false`。
Comment thread
Yeom-JinHo marked this conversation as resolved.
当返回 `true` 时,TypeScript 会将 `value` 的类型缩小为 `number`。
14 changes: 12 additions & 2 deletions src/compat/predicate/isFinite.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,17 @@ describe('isFinite', () => {
expect(isFinite('-1')).toBe(false);
});

it('should match the type of lodash', () => {
expectTypeOf(isFinite).toEqualTypeOf<typeof isFiniteLodash>();
it('should be compatible with lodash type', () => {
const lodashFn: typeof isFiniteLodash = isFinite;
expect(lodashFn(3)).toBe(true);
expect(lodashFn('3')).toBe(false);
});

it('should work as a type predicate', () => {
const value: unknown = 3;
if (isFinite(value)) {
expectTypeOf(value).toEqualTypeOf<number>();
expect(typeof value).toBe('number');
}
});
});
13 changes: 10 additions & 3 deletions src/compat/predicate/isFinite.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
/**
* Checks if `value` is a finite number.
*
* @param {any} value The value to check.
* @returns {boolean} Returns `true` if `value` is a finite number, `false` otherwise.
* Acts as a type guard for `number` values — returning `true` only when `value`
* is of type `number` and finite (not `Infinity`, `-Infinity`, or `NaN`).
*
* @param {unknown} value The value to check.
* @returns {value is number} Returns `true` if `value` is a finite number, `false` otherwise.
*
* @example
* ```typescript
Expand All @@ -13,8 +16,12 @@
* console.log(isFinite(value1)); // true
* console.log(isFinite(value2)); // false
* console.log(isFinite(value3)); // false
*
* if (isFinite(value1)) {
* console.log(value1.toFixed(2));
* }
* ```
*/
export function isFinite(value?: any): boolean {
export function isFinite(value: unknown): value is number {
return Number.isFinite(value);
}