Skip to content
← Back to rules

typescript/no-floating-promises Correctness

This rule is turned on by default when type-aware linting is enabled.
💭 This rule requires type information.
💡 A suggestion is available for this rule.

무엇을 하나요

This rule disallows "floating" Promises in TypeScript code, which is a Promise that is created without any code to handle its resolution or rejection.

This rule will report Promise-valued statements that are not treated in one of the following ways:

  • Calling its .then() with two arguments
  • Calling its .catch() with one argument
  • awaiting it
  • returning it
  • voiding it

This rule also reports when an Array containing Promises is created and not properly handled. The main way to resolve this is by using one of the Promise concurrency methods to create a single Promise, then handling that according to the procedure above. These methods include:

  • Promise.all()
  • Promise.allSettled()
  • Promise.any()
  • Promise.race()

왜 문제인가요?

Floating Promises can cause several issues, such as improperly sequenced operations, ignored Promise rejections, and more.

예시

이 규칙에서 올바르지 않은 코드 예:

ts
const promise = new Promise((resolve, reject) => resolve("value"));
promise;

async function returnsPromise() {
  return "value";
}
returnsPromise().then(() => {});

Promise.reject("value").catch();

Promise.reject("value").finally();

[1, 2, 3].map(async (x) => x + 1);

이 규칙에서 올바른 코드 예:

ts
const promise = new Promise((resolve, reject) => resolve("value"));
await promise;

async function returnsPromise() {
  return "value";
}

void returnsPromise();

returnsPromise().then(
  () => {},
  () => {},
);

Promise.reject("value").catch(() => {});

await Promise.reject("value").finally(() => {});

await Promise.all([1, 2, 3].map(async (x) => x + 1));

설정

이 규칙은 다음 속성을 갖는 설정 객체를 허용합니다.

allowForKnownSafeCalls

type: array

default: []

Allows specific calls to be ignored, specified as type or value specifiers.

allowForKnownSafeCalls[n]

type: object | string

Type or value specifier for matching specific declarations

Supports four types of specifiers:

  1. String specifier (deprecated): Universal match by name
json
"Promise"
  1. File specifier: Match types/values declared in local files
json
{ "from": "file", "name": "MyType" }
{ "from": "file", "name": ["Type1", "Type2"] }
{ "from": "file", "name": "MyType", "path": "./types.ts" }
  1. Lib specifier: Match TypeScript built-in lib types
json
{ "from": "lib", "name": "Promise" }
{ "from": "lib", "name": ["Promise", "PromiseLike"] }
  1. Package specifier: Match types/values from npm packages
json
{ "from": "package", "name": "Observable", "package": "rxjs" }
{ "from": "package", "name": ["Observable", "Subject"], "package": "rxjs" }
allowForKnownSafeCalls[n].from

type: "file"

allowForKnownSafeCalls[n].name

type: array | string

Name specifier that can be a single string or array of strings

allowForKnownSafeCalls[n].name[n]

타입: string

allowForKnownSafeCalls[n].path

타입: string

Optional file path to specify where the types or values must be declared. If omitted, all files will be matched.

allowForKnownSafePromises

type: array

default: []

Allows specific Promise types to be ignored, specified as type or value specifiers.

allowForKnownSafePromises[n]

type: object | string

Type or value specifier for matching specific declarations

Supports four types of specifiers:

  1. String specifier (deprecated): Universal match by name
json
"Promise"
  1. File specifier: Match types/values declared in local files
json
{ "from": "file", "name": "MyType" }
{ "from": "file", "name": ["Type1", "Type2"] }
{ "from": "file", "name": "MyType", "path": "./types.ts" }
  1. Lib specifier: Match TypeScript built-in lib types
json
{ "from": "lib", "name": "Promise" }
{ "from": "lib", "name": ["Promise", "PromiseLike"] }
  1. Package specifier: Match types/values from npm packages
json
{ "from": "package", "name": "Observable", "package": "rxjs" }
{ "from": "package", "name": ["Observable", "Subject"], "package": "rxjs" }
allowForKnownSafePromises[n].from

type: "file"

allowForKnownSafePromises[n].name

type: array | string

Name specifier that can be a single string or array of strings

allowForKnownSafePromises[n].name[n]

타입: string

allowForKnownSafePromises[n].path

타입: string

Optional file path to specify where the types or values must be declared. If omitted, all files will be matched.

checkThenables

타입: boolean

기본값: false

Check for thenable objects that are not necessarily Promises.

ignoreIIFE

타입: boolean

기본값: false

Ignore immediately invoked function expressions (IIFEs).

ignoreVoid

타입: boolean

기본값: true

Ignore Promises that are void expressions.

사용 방법

To enable this rule using the config file or in the CLI, you can use:

json
{
  "options": {
    "typeAware": true
  },
  "rules": {
    "typescript/no-floating-promises": "error"
  }
}
ts
import { defineConfig } from "oxlint";

export default defineConfig({
  options: { typeAware: true },
  rules: {
    "typescript/no-floating-promises": "error",
  },
});
bash
oxlint --type-aware --deny typescript/no-floating-promises

버전

이 규칙은 v1.11.0에 추가되었습니다.

참고