我正在学习打字稿(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"});
答案 0 :(得分:0)
不能直接回答您的问题,但我认为您的问题出现了,因为您在Typescript中使用了Javascript编码样式。来自Javascript,您可能习惯使用{foo:"bar"}
之类的结构来传递数据。在Typescript中,如果使用type
或interface
声明变量的类型,它确实有助于代码可读性。
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,因为它没有被声明。