Typescript 将函数返回值限制为void

Typescript 将函数返回值限制为void,typescript,Typescript,bar应为无返回值的函数: let foo = () => 'foo'; let bar: () => void = foo; // produces no error 是否可以阻止条被分配与预期的()=>无效签名不匹配的函数 例如,在这种情况下: declare let jsApiThatShouldNeverAcceptTypeofFoo = (bar: () => void) => void; jsApiThatShouldNeverAcceptTypeofFoo

bar
应为无返回值的函数:

let foo = () => 'foo';
let bar: () => void = foo; // produces no error
是否可以阻止
被分配与预期的
()=>无效
签名不匹配的函数

例如,在这种情况下:

declare let jsApiThatShouldNeverAcceptTypeofFoo = (bar: () => void) => void;
jsApiThatShouldNeverAcceptTypeofFoo(bar);

否,因为void返回函数可赋值给值返回函数。另一方面,如果希望使用void返回函数,则不能使用返回值。i、 e

let foo = () => 'foo';
let bar: () => void = foo; // produces no error

const result = bar(); // foo in runtime, TypeScript thinks it's void
const upper = result.toUpperCase(); // compile error

部分解决方法是确保函数的返回类型没有键。这可以通过
void
实现,但也可以通过
{}
never
实现。这可能已经足够接近了,因为重新调整
从不
的函数应该会引发错误,而返回
{}
的函数很少发生:

type EnsureVoid<T> = keyof T extends never ? 
    void 
    : "Should not have a return type, only ()=> void is allowed";

declare let jsApiThatShouldNeverAcceptTypeofFoo: <T extends EnsureVoid<T>>(bar: ()=> T) => void;

let foo = () => 'foo';
jsApiThatShouldNeverAcceptTypeofFoo(foo)  // Error 


let bar = () => { };
jsApiThatShouldNeverAcceptTypeofFoo(bar)


let baz = () => ({ });
jsApiThatShouldNeverAcceptTypeofFoo(baz)

let boo = () => { throw "Error" };
jsApiThatShouldNeverAcceptTypeofFoo(boo)
type EnsureVoid=keyof T extends never?
无效的
:“不应该有返回类型,只允许()=>void”;
声明let jsapithapportneveraccepttypeofoo:(bar:()=>T)=>void;
让foo=()=>'foo';
JSAPIThatUnderAcceptTypeOffoo(foo)//错误
设bar=()=>{};
JSAPIT不应接受OO类型(条形)
设baz=()=>({});
JSAPIThap不应接受Foo类型(baz)
让boo=()=>{throw“Error”};
JSAPIT不应接受OO(boo)类型

遗憾的是,
结果
如果在非TS代码中调用bar,则类型检查将不起作用。这就是我试图解决的问题。那么,这肯定是错误的,尽管在使用
toUpperCase
See@nonexplosive Sweet时它确实会产生一个传输错误。按计划工作。我只是希望有一个解决办法。对空不起作用,但总比没有好。谢谢