Skip to content

The return value of function type is not checked when function may return any #41696

@hokaccha

Description

@hokaccha

TypeScript Version: 4.2.0-dev.20201124

Search Terms:

function, type check, any

Code

const f1: () => number = () => {
  if (window) {
    return {} as any;
  }
  return "a"; // Pass
};

// Expected behavior
const f2: () => number = () => {
  return "a"; // Error: Type '() => string' is not assignable to type '() => number'
};

// Expected behavior
function f3(): number {
  if (window) {
    return {} as any;
  }
  return "a"; // Error: Type 'string' is not assignable to type 'number'.
};

Expected behavior:

f1 causes an error because it returns a string.

Actual behavior:

f1 does not cause an error.

Playground Link:

https://www.typescriptlang.org/play?ts=4.2.0-dev.20201124#code/MYewdgzgLgBAZgRgFwwBQEoYF4B8MwCuAtgEYCmATtmprjAN4BQMMAlnGgO6tgAmInTExYsKZKAQpgGAXxgBDCArABPANzMYMzWIlSYAInkG1MAPRmYABUURGMjYwswAogA8ADmWBQyvGOQAFvIAbqwgFIygkLBwAEwoGNh4hKSU1El0wjC6ktJGJuaWLhQUESgAKipeMADkmXjQFDwA5rVsSmAgsLasLWDyJAA2ZDBQIGPVo-W0KcTkFLX2js7uXj5+AWTBYRGMcARgPuHScADMGCipCwya7Fw8-IK3IjniebIKSvKqGizaone+gKplWpXKMCqNVqTVa7VYnW6XwgfQGw1G40m0OulFqADplowgA

Metadata

Metadata

Assignees

No one assigned

    Labels

    Experimentation NeededSomeone needs to try this out to see what happens

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions