Назад | Учебник TypeScript | Вперёд
В TypeScript совместимость типов основана на структурной совместимости. Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
interface Monster { health : number; } class Daemon { health : number; name : String; } class Goblin { health : number; } class Ghaul { flying : boolean; } let v1:Monster = new Daemon(); // OK let v2:Monster = new Goblin(); // OK let v3:Monster = new Ghaul(); // Ошибка, так как в Ghaul нет поля health; |
В Daemon есть дополнительный атрибут name, но это нам не мешает присвоить его переменной типа Monster, так как в Daemon есть все поля из Monster. Но мы не можем присвоить переменной типа Monster экземпляр Ghaul, так как в нём нет атрибута health.
При сравнении двух функций тоже действует совместимость типов. Мы можем присвоить переменной с типом функции, в которой больше элементов, ссылку на функции с меньшим числом элементов, так как в JavaScript последние параметры функции могут опускаться.
1 2 3 4 5 6 7 8 9 10 11 |
let x = function(arg0:number):void { alert(arg0); } let y = function(arg0:number, arg1 : string):void { alert(arg1); } y = x; x = y; // Ошибка, так как в x количество аргументов меньше. |
Перечисления в TypeScript совместимы с числами, но не совместимы с перечислениями других типов. Число также совместимы с перечислениями. Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
enum MonsterType { GOBLIN, HOBGOBLIN, GHOUL } enum OtherEnum { ELEMENT1, ELEMENT2, ELEMENT3 } let x:number = MonsterType.HOBGOBLIN; alert("x = " + x); let y:MonsterType = 2; alert("y = " + y); // А вот так нельзя // let z:OtherEnum = MonsterType.GHOUL; |
Назад | Учебник TypeScript | Вперёд