let callback1: null | (() => void) = () => {};
let callback2: null | (() => void) = null;
let callback3: null | (() => void) = null;
if (callback1 != null)
callback1(); // callable
callback2 = () => {}
if (callback2 != null)
callback2(); // callable
new Promise<void>(() => callback3 = () => {});
if (callback3 != null)
callback3(); // not callable
// ^^^
// This expression is not callable.
// Type 'never' has no call signatures.
It seems like TypeScript is doing some static analysis, but wrongly, as the code works fine in JS:
let callback3 = null;
new Promise(() => callback3 = () => { console.log("It Works"); });
if (callback3 != null)
callback3();
// output: It Works