Skip to content

[isolatedDeclarations] function expressions as an argument to a function call that is exported are reported as needing an annotationΒ #62085

@bradzacher

Description

@bradzacher

πŸ”Ž Search Terms

"isolatedDeclarations", "function return type", "exported variable"

πŸ•— Version & Regression Information

  • This changed between versions 5.6.3 and 5.7.3

⏯ Playground Link

https://www.typescriptlang.org/play/?isolatedDeclarations=true#code/JYWwDg9gTgLgBAKjgQwM5wEoFNkGN4BmUEIcA5FDvmQNwBQokscA3ivsBAHZwC+cREuRAQARgA9aDcNHhsxqLFABuSvgOKkyIiQFpKeGFLpZxTeLm6p4AYRKQuWLvAC8cBUtVQAFN4CUcC4AfKx0cHCUMACuUDwAPEFxAPRB9Lx+9CZmsnCWXNZwMAAWwFwA5oHsMJxc3gRRXBzccP6h4ZExPHYyjs5pGXRAA

πŸ’» Code

import * as React from 'react';
import { action } from 'mobx';
import { observer } from 'mobx-react';

export const Component = observer(() => {
  return <></>;
});

export const thing = action(function () {
  return Component;
});

πŸ™ Actual behavior

import * as React from 'react';
import { action } from 'mobx';
import { observer } from 'mobx-react';

export const Component = observer(() => {
             ~~~~~~~~~ Variable must have an explicit type annotation with --isolatedDeclarations.
                                  ~~~~~ Function must have an explicit return type annotation with --isolatedDeclarations.
  return <></>;
});

export const thing = action(function () {
             ~~~~~ Variable must have an explicit type annotation with --isolatedDeclarations.
                            ~~~~~~~~ Function must have an explicit return type annotation with --isolatedDeclarations.
  return Component;
});

πŸ™‚ Expected behavior

import * as React from 'react';
import { action } from 'mobx';
import { observer } from 'mobx-react';

export const Component = observer(() => {
             ~~~~~~~~~ Variable must have an explicit type annotation with --isolatedDeclarations.
  return <></>;
});

export const thing = action(function () {
             ~~~~~ Variable must have an explicit type annotation with --isolatedDeclarations.
  return Component;
});

Additional information about the issue

The function expressions are not directly exported so they should not be reported on at all.
This is causing ts-fix to insert many unnecessary annotations when codemodding the codebase at Canva because there's no way for it to tell that annotating the variable will silence the error on the function -- so it adds both annotations.

Metadata

Metadata

Assignees

Labels

Fix AvailableA PR has been opened for this issueHelp WantedYou can do thisPossible ImprovementThe current behavior isn't wrong, but it's possible to see that it might be better in some cases

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions