typescript - 打字稿无法触发多余的成员检查是否传播了受约束类型的成员
问题描述
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
}
abc
和abc3
预期的工作
然而abc2
不是我所期望的
我的问题:</p>
abc2
无法触发超额会员检查的原因- 正确的方法
解决方案
我只想发表评论,但我的声誉很低。
我认为这个例子可以简化为:
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
}
根据我的研究,这是typescript 社区中已经讨论过的问题,并且由于 typescript 是结构化类型的。
对于精确类型的函数参数,这是一个很好的解决方案,但我无法让它与返回类型一起使用。
推荐阅读
- multithreading - 异步代码是否浪费处理能力
- django - 使用 update_or_create() 获取“重复键值违反唯一约束”(非默认字段是 unique_together)
- angular - 等待通过 websocket 的承诺
- java - 为什么在方法中将 { 5,7,5,8,1} 作为数组传递会在 Java 中引发错误?
- javascript - 通过 foo 循环一次在按钮上添加单个唯一类
- sql - PLS-00103:在预期以下情况之一时遇到符号“”:
- api - 如何在 Flask 中验证参数
- javascript - (Javascript) How to return two promises in one function on different condition
- python - 时间作为s3 concat中的参数
- css - 添加太多组件时,React div 行为很奇怪