当lastName是一个数字时,为什么typescript不显示错误?

时间:2016-10-14 01:48:04

标签: typescript

尝试学习打字稿,就像打字稿的类型检查一样,只是想知道 为什么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))

1 个答案:

答案 0 :(得分:1)

在您的班级Student中,两个属性的隐式类型为any

class Student {
  constructor(public firstName, public lastName) {
  }
}

......相当于:

class Student {
  public firstName: any;
  public lastName: any;
  // Here the constructor
}

因此,类Student的实例与Person兼容,因为anystring兼容。

由于user类型,可以使用字符串和数字创建实例any

let user = new Student("Jane", 123)

...然后,您可以编写错误的代码:

let p: Person;
p = user; // wrong code here

类型any是一种禁用类型检查的方法。如果您知道自己在做什么,请使用它。