使用对象解析承诺时,Typescript允许使用冗余键
请您帮助我理解为什么Typescript不会在此处抛出错误:使用对象解析承诺时,Typescript允许使用冗余键,typescript,object,promise,key,Typescript,Object,Promise,Key,请您帮助我理解为什么Typescript不会在此处抛出错误: 型式试验=承诺; const test:test=Promise.resolve({a:1,something:'error'});//无误 但是在这里呢 type Test2 = {a: number}; const test2: Test2 = {a: 1, something: 'wrong'}; // error 2322, ok 我能做些什么,让它在承诺中抛出类似的错误吗 在Typescript的不同版本上试用过它,包括
型式试验=承诺;
const test:test=Promise.resolve({a:1,something:'error'});//无误
但是在这里呢
type Test2 = {a: number};
const test2: Test2 = {a: 1, something: 'wrong'}; // error 2322, ok
我能做些什么,让它在承诺中抛出类似的错误吗
在Typescript的不同版本上试用过它,包括最新版本,使用严格的类型。
尝试使用新承诺
而不是承诺。解决
。没什么帮助。
看看
提前谢谢你 TypeScript仅在非常有限的情况下执行多余的属性检查(将对象文字直接分配给类型化变量,从函数返回对象文字;),因为尽管从类型系统的角度来看,这些额外的属性很好(它们只是指实例属于具有更多信息的类型的子类型),将它们放在正在分配的对象文字上通常是程序员的错误。否则,它不会执行该检查,因为在一般情况下,它很可能不是错误(只是子类型) 您可以在
Promise.resolve上触发多余的属性检查,方法是向其提供类型参数()(谢谢!):
const test=Promise.resolve({a:1,something:'error'});
// ^^^^^^^^^^^^^^^^^^−− 类型为“{a:number;something:string;}”的参数不能分配给类型为“{a:number;}| PromiseLike”的参数
在这种情况下,TypeScript将test
的类型推断为Promise
(例如,您的test
类型)
您还可以检查async
函数返回():
型式试验=承诺;
异步函数asyncExample(a:number):测试{
返回{a,extra:true};//类型{a:number;extra:boolean;}不可分配给类型{a:number;}
}
…因此,如果您可以使用async
函数而不是显式的promise语法,那么您可能可以加强检查。您还可以执行promise.resolve({a:1,something:'error')代码>如果您想看到错误,提供指向的手册链接可能会有所帮助。@jcalz-哦,我不认为您是。:-)我会的。顺便说一句,我真的很感谢你把这件事告诉我。