跳到主內容

@typescript-eslint/scope-manager

npm: @typescript-eslint/scope-manager v7.13.1

eslint-scope 的分支,增強以支援 TypeScript 功能。 ✨

「範圍分析程式」會遍歷 AST 並建立一個模型,說明原始碼如何定義和使用變數(在我們的案例中為類型)。這種類型的靜態分析讓您可以了解和追蹤整個程式中的變數,讓您存取有關程式的強大資料,而不必深入更具深度的類型資料中。

API

analyze(tree, options)

分析給定的 AST 並傳回產生的 ScopeManager

interface AnalyzeOptions {
/**
* Known visitor keys.
*/
childVisitorKeys?: Record<string, string[]> | null;

/**
* Whether the whole script is executed under node.js environment.
* When enabled, the scope manager adds a function scope immediately following the global scope.
* Defaults to `false`.
*/
globalReturn?: boolean;

/**
* Implied strict mode.
* Defaults to `false`.
*/
impliedStrict?: boolean;

/**
* The identifier that's used for JSX Element creation (after transpilation).
* This should not be a member expression - just the root identifier (i.e. use "React" instead of "React.createElement").
* Defaults to `"React"`.
*/
jsxPragma?: string;

/**
* The identifier that's used for JSX fragment elements (after transpilation).
* If `null`, assumes transpilation will always use a member on `jsxFactory` (i.e. React.Fragment).
* This should not be a member expression - just the root identifier (i.e. use "h" instead of "h.Fragment").
* Defaults to `null`.
*/
jsxFragmentName?: string | null;

/**
* The lib used by the project.
* This automatically defines a type variable for any types provided by the configured TS libs.
* For more information, see https://typescript.dev.org.tw/tsconfig#lib
*
* Defaults to ['esnext'].
*/
lib?: Lib[];

/**
* The source type of the script.
*/
sourceType?: 'script' | 'module';

/**
* Emit design-type metadata for decorated declarations in source.
* Defaults to `false`.
*/
emitDecoratorMetadata?: boolean;
}

使用範例

import { analyze } from '@typescript-eslint/scope-manager';
import { parse } from '@typescript-eslint/typescript-estree';

const code = `const hello: string = 'world';`;
const ast = parse(code, {
// note that scope-manager requires ranges on the AST
range: true,
});
const scope = analyze(ast, {
sourceType: 'module',
});

參考