类型参数在Typescript中不是可赋值的错误

时间:2017-09-09 07:03:16

标签: typescript

我正在学习打字稿(2.5.2)。有人可以解释为什么第一个电话没问题,但第二个电话错误:

function printPerson(person: {firstName: string; lastName: string}): void{
    console.log(person.firstName + " " + person.lastName);
}

let geo = {firstName: "geo", lastName: "porz", sex: "M"};
printPerson(geo); //OK here

// TS2345 Argument of type ... is not assignable to parameter of type ... 
printPerson({firstName: "geo", lastName: "porz", sex: "M"}); 

1 个答案:

答案 0 :(得分:0)

不能直接回答您的问题,但我认为您的问题出现了,因为您在Typescript中使用了Javascript编码样式。来自Javascript,您可能习惯使用{foo:"bar"}之类的结构来传递数据。在Typescript中,如果使用typeinterface声明变量的类型,它确实有助于代码可读性。

interface Person { 
  firstName: string
  lastName: string
}

function printPerson(person: Person): void{
    console.log(person.firstName + " " + person.lastName);
}

现在,在创建person对象时,我们告诉编译器geo是Person:

,而不是依赖于类型推断。
let geo:Person = {firstName: "geo", lastName: "porz", sex: "M"};

现在你会得到同样的错误:你不能将sex属性添加到Person,因为它没有被声明。