Как знать тип параметра, перешедший в функцию в Typescript?

У меня есть сомнение с Угловым 2 и typeScript

У меня есть такой интерфейс:

export interface DataForm{
  cuenta:string;
  nombre:string;
}

После я считаю функцию такой:

public  datas(x:DataForm){
  console.log(x);
}

И у меня есть переменная obj:number=20; И я перемещаю ее его как parámentro в функцию, которую я сделал:

this.datas(this.obj);

В консоли он возвращает мне 20.

Не предполагается, что после того, как не того же типа, он был бы должен показывать ошибку. Мое сомнение - какой я подтверждаю, что параметр, что расписка была равна указанному типу функции.

Эта функция действительно получила бы поля формуляра с этим поля, но я появилось это сомнение, как я показываю ошибку, если они не того же типа. В редакторе, если меня помечает ошибка, но составив он не показывает никакой ошибки. Я думаю, что делать type of было бы решением, только, что остался с сомнением, почему он не бросает ошибку, составив.

3
задан 18.04.2017, 23:33
1 ответ

Проблема состоит в том, что TypeScript был разработан как расширение javascript, для того, чтобы составители смогли обнаруживать этот тип ошибок, а следовательно ты только хватался во времени компиляции, это, "когда ты находишься в редакторе", потому что потом совсем "transpila" в язык сценариев JavaScript, и оно действительно ты будет функционировать, перемести его то, что ты перемещаешь его (априори). Поэтому он показывает тебе 20 в консоли. В самом деле, редактор, это тот, который был бы должен давать тебе какое-то объявление, показывая проблему типов, в плане linter.

Чтобы гарантировать тебя, я не уверен, было ли достаточно только одного typeof, так как он может быть возвратил тебе всегда один Object и не конкретный класс (равно как он происходит в JS). Самое уверенное в TS произошло бы из-за того, что использовало бы один instanceof, такой, который я схватил:

   if (x instanceof DataForm) {
      console.log(x);
   } else {
      alert('error');
   }

Они это объясняют лучше в официальной документации

Решение в vanilla JS состоит в том, чтобы использовать Object.prototype.hasOwnProperty. Немного, как которое они комментируют где-то здесь

3
ответ дан 24.11.2019, 12:21