С Тест на утку и Печать утки и в Википедии
Если это похоже на утку, плавает как утка и крякает как утка, то это, вероятно, утка.
По сути, так работают интерфейсы TypeScript. Объект просто должен выглядеть как интерфейс, а не явно реализовывать его.
Сформируйте страницу, на которую вы ссылались:
interface LabelledValue {
label: string;
}
function printLabel(labelledObj: LabelledValue) {
console.log(labelledObj.label);
}
let myObj = {size: 10, label: "Size 10 Object"};
printLabel(myObj);
Несмотря на то, что myObj
явно не реализует интерфейс LabelledValue
, он имеет такую же структуру и, следовательно, неявно реализует интерфейс. Это утка набрав
ОБНОВЛЕНИЕ Если интерфейс LabelledValue
определен как класс, то приведенный выше код не будет "компилироваться". Это структурный набор текста.
Примечание У TypeScript нет проверки во время выполнения, поскольку он «скомпилирован» до JavaScript