Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用对象解析承诺时,Typescript允许使用冗余键_Typescript_Object_Promise_Key - Fatal编程技术网

使用对象解析承诺时,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的不同版本上试用过它,包括

请您帮助我理解为什么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-哦,我不认为您是。:-)我会的。顺便说一句,我真的很感谢你把这件事告诉我。