Я придумал один способ научиться печатать сильнее. Мне это не очень нравится. К каждому типу добавляется специальное поле или метод, что делает его несовместимым с другими, которые можно было бы принять за уток.
Следующее не позволяет заменять Parrot на Duck, потому что у класса Duck есть дополнительный метод (поэтому Parrot не может набрать утку). Воробьи и попугаи, по-видимому, можно заменить при наборе утиных текстов, потому что попугай не может делать ничего такого, что не может воробей, и наоборот. Конечно, Утка может заменить Попугая, потому что если это звучит как попугай, то это попугай.
Протестируйте с помощью www.typescriptlang.org/Playground/:
class Sparrow {
sound = "cheep";
}
class Parrot {
sound = "squawk";
}
class Duck {
sound = "quack";
swim(){
alert("Going for a dip!");
}
}
var parrot: Parrot = new Sparrow(); // substitutes
var sparrow: Sparrow = new Parrot(); // substitutes
var parrotTwo: Parrot = new Duck();
var duck: Duck = new Parrot(); // IDE & compiler error
alert("Parrot says "+parrot.sound+" and sparrow says "+sparrow.sound+", and 2nd parrot says "+parrotTwo.sound);
alert("A duck says "+duck.sound);
Практически я бы сделал это (что работает в моей среде IDE, но не на игровой площадке):
interface RawUri extends String {
rawUri;
}
interface EncodedUri extends String {
encodedUri;
}
var e: EncodedUri = new RawUri(); // IDE & compiler error
var r: RawUri = new EncodedUri(); // IDE & compiler error
Неприятно и возможность для другого интерфейса случайно использовать то же имя поля. Я полагаю, что можно было бы добавить случайный элемент к члену против утки.
person
Eric
schedule
26.03.2014