Здравствуйте, Takadam, Вы писали:
S>>Это понятно, просто чем-то интересным это не выглядит.
T>а что выглядит, проверять в теле функции, какие ключи были переданы?
Да я не спорю что полезно, просто... в статических языках такое и так есть, в динамических — см. ниже, тоже успели реализовать.
S>>>>И да, такое есть в typescript, только там ещё можно типы указать:
T>>>и в C#, и джаве и c++ и в еще куче статич. языков тоже есть. только мы говорим про руби и питон потому что perl 6 ближе к ним.
S>>Typescript динамический язык.
T>тогда почему при объявление переменных указывается их тип?
Это надмножество javascript с опциональной типизацией, для любого типа можно указать "any" и использовать как в обычном js.
Что мне особо нравится, вывод типа идёт по содержимому, а не по наследованию:
class User {
public constructor(
public Name:string,
public Title: string
) { }
}
class Group {
public constructor(
public Name:String,
public Options: number)
{ }
}
function printName(entity: {Name: string}) {
console.log(entity.Name);
}
// Несмотря на то что это разные классы, они удовлетворяют требованию о наличии поля Name
printName(new User("Test", "test"));
printName(new Group("Test", 1));
// Или вообще так:
printName({Name: "Inline" });
// При этом всё равно проверяются типы:
printName({Name: 123}); // Ошибка
// Можно сказать что Name может быть числом или строкой
function printName2(entity: {Name: string|number}) {
console.log(entity.Name);
}
// и тогда этот вызов будет корректным
printName2({Name: 123}); // Теперь не ошибка
Поиграться можно тут:
http://www.typescriptlang.org/Playground
ARI ARI ARI... Arrivederci!