首页 > 解决方案 > 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]

标签: javascripttypescript

解决方案


推荐阅读