diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index b85acc03d468f..8a64e585e4a66 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -3604,7 +3604,7 @@ namespace ts { function symbolToParameterDeclaration(parameterSymbol: Symbol, context: NodeBuilderContext, preserveModifierFlags?: boolean): ParameterDeclaration { const parameterDeclaration = getDeclarationOfKind(parameterSymbol, SyntaxKind.Parameter); - Debug.assert(!!parameterDeclaration || isTransientSymbol(parameterSymbol) && !!parameterSymbol.isRestParameter); + Debug.assert(!!parameterDeclaration || isTransientSymbol(parameterSymbol)); let parameterType = getTypeOfSymbol(parameterSymbol); if (parameterDeclaration && isRequiredInitializedParameter(parameterDeclaration)) { @@ -3613,7 +3613,8 @@ namespace ts { const parameterTypeNode = typeToTypeNodeHelper(parameterType, context); const modifiers = !(context.flags & NodeBuilderFlags.OmitParameterModifiers) && preserveModifierFlags && parameterDeclaration && parameterDeclaration.modifiers && parameterDeclaration.modifiers.map(getSynthesizedClone); - const dotDotDotToken = !parameterDeclaration || isRestParameter(parameterDeclaration) ? createToken(SyntaxKind.DotDotDotToken) : undefined; + const isRest = parameterDeclaration ? isRestParameter(parameterDeclaration) : (parameterSymbol as TransientSymbol).isRestParameter; + const dotDotDotToken = isRest ? createToken(SyntaxKind.DotDotDotToken) : undefined; const name = parameterDeclaration ? parameterDeclaration.name ? parameterDeclaration.name.kind === SyntaxKind.Identifier ? diff --git a/tests/cases/fourslash/codeFixInferFromUsageJSXElement.ts b/tests/cases/fourslash/codeFixInferFromUsageJSXElement.ts new file mode 100644 index 0000000000000..250673d91fc40 --- /dev/null +++ b/tests/cases/fourslash/codeFixInferFromUsageJSXElement.ts @@ -0,0 +1,40 @@ +/// + +// @noImplicitAny: true +// @jsx: react +// @module: es2015 +// @moduleResolution: node + +// @Filename: /node_modules/@types/react/index.d.ts +////export = React; +////export as namespace React; +////declare namespace React { +//// export class Component { render(): JSX.Element | null; } +////} +////declare global { +//// namespace JSX { +//// interface Element {} +//// } +////} + + +// @filename: a.tsx +//// import React from 'react'; +//// +//// export default function Component([|props |]) { +//// if (props.isLoading) { +//// return
...Loading < /div>; +//// } +//// else { +//// return { +//// return props.update(rec); +//// } +//// } +//// />; +//// } +//// } + + +verify.rangeAfterCodeFix("props: { isLoading: any; update: (arg0: any) => void; }",/*includeWhiteSpace*/ undefined, /*errorCode*/ undefined, 0); \ No newline at end of file