پیشنهاد اضافه شدن type به JavaScript
Today we’re excited to announce our support and collaboration on a new Stage 0 proposal to bring optional and erasable type syntax to JavaScript. Because this new syntax wouldn’t change how surrounding code runs, it would effectively act as comments. We think this has the potential to make TypeScript easier and faster to use for development at every scale. We’d like to talk about why we’re pursuing this, and how this proposal works at a high level.
آموزش TypeScript #5
export interface ILogger { log(message: string): void; }
حال نیاز به کلاسی داریم که این اینترفیس را پیاده سازی کند. این پیاده سازی به صورت زیر انجام میگیرد:
export class Logger implements ILogger { }
export class AnnoyingLogger implements ILogger { log(message: string): void{ alert(message); } }
export class MyClass implements IFirstInterface, ISecondInterface { }
IPerson { firstName: string; lastName: string; } class Person implements IPerson { constructor(public firstName: string, public lastName: string) { } } varpersonA: IPerson = newPerson('Masoud', 'Pakdel'); //expilict varpersonB: IPerson = { firstName: 'Ashkan', lastName: 'Shahram'}; // duck typing
پیاده سازی چند اینترفیس به صورت همزمان
همانند دات نت که یک کلاس فقط میتواند از یک کلاس ارث ببرد ولی میتواند n تا اینترفیس را پیاده سازی کند در TypeScript نیز چنین قوانینی وجود دارد. یعنی یک اینترفیس میتواند چندین اینترفیس دیگر را توسعه دهد(extend) و کلاسی که این اینترفیس را پیاده سازی میکند باید تمام توابع اینترفیسها را پیاده سازی کند. مثال:
interface IMover { move() : void; } interface IShaker { shake() : void; } interface IMoverShaker extends IMover, IShaker { } class MoverShaker implements IMoverShaker { move() { } shake() { } }
instanceof
از instanceof زمانی استفاده میکنیم که قصد داشته باشیم که یک instance را با یک نوع مشخص مقایسه کنیم. اگر instance مربوطه از نوع مشخص باشد یا از این نوع ارث برده باشد مقدار true برگشت داده میشود در غیر این صورت مقدار false خواهد بود.
یک مثال:
var isLogger = logger instanceof Utilities.Logger; var isLogger = logger instanceof Utilities.AnnoyingLogger; var isLogger = logger instanceof Utilities.Formatter;
در TypeScript میتوان مانند زبانهای شی گرای دیگر Method overriding را پیاده سازی کرد. یعنی میتوان متدهای کلاس پایه را در کلاس مشتق شده تحریف کرد. با یک مثال به شرح این مورد خواهم پرداخت.
فرض کنید یک کلاس پایه به صورت زیر داریم:
class BaseEmployee { constructor (public fname: string,public lname: string) { } sayInfo() { alert('this is base class method'); } }
class Employee extends BaseEmployee { sayInfo() { alert('this is derived class method'); } } window.onload = () => { var first: BaseEmployee= new Employee(); first.sayInfo(); var second: BaseEmployee = new BaseEmployee(); second.sayInfo(); }
*اگر در کلاس مشتق شده قصد داشته باشیم که به توابع و فیلدهای کلاس پایه اشاره کنیم باید از کلمه کلیدی super استفاده کنیم.(معادل base در #C).
مثال:
class Animal { constructor (public name: string) { } } class Dog extends Animal { constructor (public name: string, public age:number) { super(name); } sayHello() {
alert(super.name);
} }
public class Dog : Animal { public Dog (string name, int age):base(name) { } }
*دقت کنید که مباحث مربوط به interface و private modifier و Type safety که پیشتر در مورد آنها بحث شد، فقط در فایلهای TypeScript و در هنگام کد نویسی و طراحی معنی دار هستند، زیرا بعد از کامپایل فایلهای ts این مفاهیم در Javascript پشتیبانی نمیشوند در نتیجه هیچ مورد استفاده هم نخواهد داشت.
ادامه دارد...
In September of 2014, at the ng-Europe conference, the Angular team announced what would be known as Angular 2.Is was a drastic change that left many developers angry. One of the main sources of complaint was the lack of a migration path.
تغییر مجوز استفادهی از Redis
Redis, the popular in-memory data store, is switching away from the open source three-clause BSD license. Instead, in a move that is clearly aimed to prevent the large cloud providers from offering free alternatives to Redis’ own hosted services, Redis will now be dual-licensed under the Redis Source Available License (RSALv2) and Server Side Public License (SSPLv1). Under this new license, cloud service providers hosting Redis will need to enter into a commercial agreement with Redis. The first company to do so is Microsoft.