isOptionalChain
a?.b, and the parts of the chain after it (a?.b.c).
import { NodeFlags, SyntaxKind } from "typescript/ast"; import type { Node } from "typescript/ast"; export function isOptionalChain(node: Node): boolean { const k = node.kind; return !!(node.flags & NodeFlags.OptionalChain) && (k === SyntaxKind.PropertyAccessExpression || k === SyntaxKind.ElementAccessExpression || k === SyntaxKind.CallExpression || k === SyntaxKind.NonNullExpression); }