typescript/no-floating-promises Correctness
何をするか
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 itreturning itvoiding 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.
例
このルールで適合しないコード例:
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);このルールで適合するコード例:
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:
- String specifier (deprecated): Universal match by name
"Promise"- File specifier: Match types/values declared in local files
{ "from": "file", "name": "MyType" }
{ "from": "file", "name": ["Type1", "Type2"] }
{ "from": "file", "name": "MyType", "path": "./types.ts" }- Lib specifier: Match TypeScript built-in lib types
{ "from": "lib", "name": "Promise" }
{ "from": "lib", "name": ["Promise", "PromiseLike"] }- Package specifier: Match types/values from npm packages
{ "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:
- String specifier (deprecated): Universal match by name
"Promise"- File specifier: Match types/values declared in local files
{ "from": "file", "name": "MyType" }
{ "from": "file", "name": ["Type1", "Type2"] }
{ "from": "file", "name": "MyType", "path": "./types.ts" }- Lib specifier: Match TypeScript built-in lib types
{ "from": "lib", "name": "Promise" }
{ "from": "lib", "name": ["Promise", "PromiseLike"] }- Package specifier: Match types/values from npm packages
{ "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:
{
"options": {
"typeAware": true
},
"rules": {
"typescript/no-floating-promises": "error"
}
}import { defineConfig } from "oxlint";
export default defineConfig({
options: { typeAware: true },
rules: {
"typescript/no-floating-promises": "error",
},
});oxlint --type-aware --deny typescript/no-floating-promisesバージョン
このルールは v1.11.0 で追加されました。