2016-04-10 2 views
3

Я делаю свой первый тест с помощью TypScript с использованием Codepen.io, и я не понимаю, почему после объявления функции и возвращаемого типа с помощью интерфейса я могу тогда возвращает другой тип без каких-либо ошибок.рабочая функция, даже если она возвращает неправильный тип

Я что-то упустил?

Пример кода:

interface IPerson { 
    getFullName:() => void; 
} 

class Person implements IPerson{ 

constructor(
    public name: string, 
    public surname: string 
){} 

getFullName() { 
    return this.name + ' ' + this.surname; 
} 

} 


let p = new Person('John','Doe'); 

console.log(p.getFullName()); 

Результат:

John Doe 

Проблема: Почему выхода из 'John Doe' (в виде строки), даже если я объявил a void тип возврата?

ответ

2

машинопись выбросит ошибку компиляции, что-то вроде этого:

Тип «строка» не присваиваемые типа «недействительным».

Однако машинопись все еще будет скомпилирована для Javascript. Сам JS не имеет какого-либо понятия типов и поэтому просто регистрирует значение, потому что среда выполнения не знает, что такое тип возврата getFullName().

Если вы не собираетесь его компилировать, когда есть ошибка компилятора, вы можете установить флаг noEmitOnError в tsconfig.json.

+0

, так как вы думаете, что это всего лишь ошибка, связанная с кодепином, поскольку она просто компилируется в JS? Я получаю сообщение об ошибке, если попытаюсь запустить код с кодом с помощью компилятора TypScript, верно? – fbid

+0

Да, вы получите ошибку, но ts по-прежнему будет генерировать JS-файлы. –

+0

Вы можете попробовать тот же код на https://www.typescriptlang.org/play/ Это обязательно должно быть ошибка. –