javascript - Typescript 错误 2345 在简单示例中似乎不一致
问题描述
我有一个关于 Typescript 基础的问题。
考虑这个例子:
// Interface 1
interface Empty {}
// Interface 2
interface Single {
a: number;
}
function printEmpty(arg: Empty): void {
console.log(`Hello World.`);
}
function printSingle(arg: Single): void {
console.log(`Hello World, a: ${arg.a} `)
}
const obj = {a: 1, b: 2};
// ===================== Tests =====================
// TEST 1
printEmpty({a: 1, b: 2}); // valid
// TEST 2
// Q1: if the above is valid, why is this invalid
printSingle({a: 1, b: 2}) // invalid!
// TEST 3
// Q2: if the above is invalid, why is this valid
printSingle(obj); // valid
我得到的错误是
type
'{ a: number; b: number; }'
的参数不能分配给 type 的参数'Single'
。对象字面量只能指定已知属性,并且'b'
不存在于类型中'Single'
。(2345)
为什么 TEST 2 失败但 TEST 1 和 TEST 3 通过?
这是官方 TS 操场上此错误的重现:[LINK]
解决方案
推荐阅读
- c++ - 在 C++ 中乘以 2 个大数有错误的结果
- c++ - 具有可变长度写入的多个生产者多个消费者无锁非阻塞环形缓冲区
- gitlab - 免费帐户的 GitLab 项目限制是多少?
- php - 未找到 Laravel 视图 5.2
- javascript - 将图像转换为 base64 时无法读取未定义的属性“宽度”?
- c# - 如何使用数据合同将模式版本号添加到 xml 中的节点?
- ajax - 什么是 AJAX?它是如何工作的?
- python - 验证用户是否使用英文或拉丁字符,如果不是则发出警告
- javascript - 此实验语法需要启用解析器插件:'exportDefaultFrom'
- sql-server - 计算具有别名的两列之间的百分比差异