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无法触发多余成员检查 const abc=():T['res']=>{ 返回{a:“1”,b:1}//多余的成员,错误如预期,ok } 常数abc2=():T['res']=>{ 常数c:T['res']={a:“1”} 常量d:T['res']={a:“1”,b:“1”}//多余的成员,错误如预期,正常 返回{…c,a:“1”,b:1}//即使有过多的成员,也没有错误,出现问题 } 常量abc3=():T['res']=>{ 类型c={res:{a:string}} 常数c:c['res']={a:“1”} 返回{…c,a:“1”,b:1}//多余的成员,错误如预期,ok }_Typescript - Fatal编程技术网

如果扩展受约束类型的成员,则typescript无法触发多余成员检查 const abc=():T['res']=>{ 返回{a:“1”,b:1}//多余的成员,错误如预期,ok } 常数abc2=():T['res']=>{ 常数c:T['res']={a:“1”} 常量d:T['res']={a:“1”,b:“1”}//多余的成员,错误如预期,正常 返回{…c,a:“1”,b:1}//即使有过多的成员,也没有错误,出现问题 } 常量abc3=():T['res']=>{ 类型c={res:{a:string}} 常数c:c['res']={a:“1”} 返回{…c,a:“1”,b:1}//多余的成员,错误如预期,ok }

如果扩展受约束类型的成员,则typescript无法触发多余成员检查 const abc=():T['res']=>{ 返回{a:“1”,b:1}//多余的成员,错误如预期,ok } 常数abc2=():T['res']=>{ 常数c:T['res']={a:“1”} 常量d:T['res']={a:“1”,b:“1”}//多余的成员,错误如预期,正常 返回{…c,a:“1”,b:1}//即使有过多的成员,也没有错误,出现问题 } 常量abc3=():T['res']=>{ 类型c={res:{a:string}} 常数c:c['res']={a:“1”} 返回{…c,a:“1”,b:1}//多余的成员,错误如预期,ok },typescript,Typescript,abc和abc3预期工作 然而,abc2并不是我所期望的 我的问题: 原因abc2无法触发超额成员检查 正确的方法 我只是想评论一下,但我的声誉太低了 我认为这个例子可以简化为: const abc =<T extends {res:{a:string}}>():T['res']=>{ return {a:"1",b:1} // excess member, error as expected, ok } const abc2 =<T e

abc
abc3
预期工作

然而,
abc2
并不是我所期望的

我的问题:

  • 原因
    abc2
    无法触发超额成员检查
  • 正确的方法

  • 我只是想评论一下,但我的声誉太低了

    我认为这个例子可以简化为:

    const abc =<T extends {res:{a:string}}>():T['res']=>{
    
        return {a:"1",b:1} // excess member, error as expected, ok
    }
    
    const abc2 =<T extends {res:{a:string}}>():T['res']=>{
    
        const c:T['res'] ={a:"1"}
    
        const d:T['res'] ={a:"1",b:"1"} // excess member, error as expected, ok
    
        return {...c,a:"1",b:1 } // no error eventhough with excess member, problem
    }
    
    const abc3 =<T extends {res:{a:string}}>():T['res']=>{
    
        type c = {res:{a:string}}
    
        const c:c['res'] ={a:"1"}
    
        return {...c,a:"1",b:1 } // excess member, error as expected, ok
    }
    

    根据我的研究,这是typescript社区中的一个重要问题,这是因为typescript是按结构键入的


    对于完全类型化的函数参数,但我无法将其用于返回类型。

    我在周五遇到了类似的问题)我相信这是因为spread运算符,但从Folks这里会很有趣这里已经讨论的问题与我的情况不同,在您的链接问题上,多余的成员存在于排列对象中,“父对象”无法触发对该排列对象的多余成员检查(这是我已经面临并解决的问题)。在这种情况下,多余成员存在于扩展对象之外,扩展对象会导致“父对象”无法触发多余成员检查其他属性。**注释重新发布以修复某些错误**
    type ret = { a: string } 
    
    const abc = ():ret =>{
        return {a:"1", b:"2"} // raises error as expected
    }
    
    const abc2 = ():ret =>{
        const t = {a:"1", b:"2"} 
        return t; // should raise error but doesn't
    }