From 2e1b1afa0dc405641b57963148b8487a3d6ddb50 Mon Sep 17 00:00:00 2001 From: Evgeniy Timokhov Date: Mon, 21 Nov 2022 20:57:57 +0000 Subject: [PATCH] Fixed handling optional binding elements in dts files Fixes #229 Co-authored-by: jinzhubaofu --- src/types-usage-evaluator.ts | 7 ++++++- tests/e2e/test-cases/primitive-generation/input.ts | 4 ++++ tests/e2e/test-cases/primitive-generation/output.d.ts | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/types-usage-evaluator.ts b/src/types-usage-evaluator.ts index 954f7aa..080ba62 100644 --- a/src/types-usage-evaluator.ts +++ b/src/types-usage-evaluator.ts @@ -89,6 +89,11 @@ export class TypesUsageEvaluator { continue; } + // `{ propertyName: name }` - in this case we don't need to handle `propertyName` as it has no symbol + if (ts.isBindingElement(child.parent) && child.parent.propertyName === child) { + continue; + } + const childSymbols = splitTransientSymbol(this.getSymbol(child), this.typeChecker); for (const childSymbol of childSymbols) { @@ -110,7 +115,7 @@ export class TypesUsageEvaluator { private getSymbol(node: ts.Node): ts.Symbol { const nodeSymbol = this.typeChecker.getSymbolAtLocation(node); if (nodeSymbol === undefined) { - throw new Error(`Cannot find symbol for node: ${node.getText()}`); + throw new Error(`Cannot find symbol for node "${node.getText()}" in "${node.parent.getText()}" from "${node.getSourceFile().fileName}"`); } return this.getActualSymbol(nodeSymbol); diff --git a/tests/e2e/test-cases/primitive-generation/input.ts b/tests/e2e/test-cases/primitive-generation/input.ts index 3c4923a..287c716 100644 --- a/tests/e2e/test-cases/primitive-generation/input.ts +++ b/tests/e2e/test-cases/primitive-generation/input.ts @@ -4,3 +4,7 @@ export interface InterfaceName { prop: number; prop2: TypeName; } + +export function func({ prop: prop3 }: InterfaceName = { prop: 1, prop2: 1 }): TypeName { + throw new Error('it does not matter' + prop3); +} diff --git a/tests/e2e/test-cases/primitive-generation/output.d.ts b/tests/e2e/test-cases/primitive-generation/output.d.ts index dbc5c0f..0b88bd9 100644 --- a/tests/e2e/test-cases/primitive-generation/output.d.ts +++ b/tests/e2e/test-cases/primitive-generation/output.d.ts @@ -3,5 +3,6 @@ export interface InterfaceName { prop: number; prop2: TypeName; } +export declare function func({ prop: prop3 }?: InterfaceName): TypeName; export {};