尝试学习打字稿,就像打字稿的类型检查一样,只是想知道 为什么tsc无法检测到lastName是一个在下列情况下的数字?感谢,
class Student {
constructor(public firstName, public lastName ) {
}
}
interface Person {
firstName : string;
lastName : string;
}
function greeter(person : Person) {
return "hello, " + person
}
var user = new Student("Jane", 123)
console.log('user', user)
console.log('user.lastName is', typeof user.lastName)
console.log(greeter(user))
答案 0 :(得分:1)
在您的班级Student
中,两个属性的隐式类型为any
:
class Student {
constructor(public firstName, public lastName) {
}
}
......相当于:
class Student {
public firstName: any;
public lastName: any;
// Here the constructor
}
因此,类Student
的实例与Person
兼容,因为any
与string
兼容。
由于user
类型,可以使用字符串和数字创建实例any
:
let user = new Student("Jane", 123)
...然后,您可以编写错误的代码:
let p: Person;
p = user; // wrong code here
类型any
是一种禁用类型检查的方法。如果您知道自己在做什么,请使用它。