javascript - typescript 类型检查具有误导性,typescript 没有报告此类型错误
问题描述
与定义冲突但没有错误使我产生误导
type Ttest = 'a' | 'b'
function test1(k: Ttest, p: number | string){
let aa: {a: number, b: string} = {a: 1, b: "2"};
// no error but conflict with definition that b should not be number
aa = {
...aa,
[k]: p
}
// Type 'string | number' is not assignable to type 'never'. {why aa[k] is never, expect is string|number}
// aa[k] = p
}
test1('b', 10);
解决方案
// Conflict with definition but no error
test1('b', 10);
对于上述错误,您的输入k
被定义为Ttset
只能是'a'
或'b'
如上定义的类型。由于您的输入'b'
确实被认为是 type 的子集Ttset
,因此它不会引发任何错误。
补充:我不认为打字稿会检查k
代码的类型以及要覆盖的变量。
特长; 它视为aa
对象而不是字典!
编辑:事实证明我对答案的第二部分是错误的。
使用 spread 参数...
可以覆盖对象中的属性。
推荐阅读
- python - 如何将离线 Plotly 图表导出为交互式 HTML
- ionic4 - ionic 4 angular 尝试运行代码时出现未找到错误
- css - bootstrap 下拉菜单 3.3.7 子菜单不展开
- python - 如果列的开始行并不总是相同,有没有办法在 Python 中使用 Excel 中的行开始?
- sql-server - 如何从 Entity Framework Core 中的原始 SQL 查询获取动态结果
- kotlin - 在 kotlin gradle dsl 中外部化插件版本?
- r - 在循环中创建fluidRows R Shiny
- python - Python Pareto 图问题
- reactjs - 在同一页面上加载多个react应用,覆盖react-scripts中的webpack输出jsonpFunction
- sql - 获取 12 个月内每个月(直到那个月)的数据