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时它确实会产生一个传输错误。按计划工作。我只是希望有一个解决办法。对空不起作用,但总比没有好。谢谢