• java veya c# tadinda javascript yazmaktir typescript.

    sonucta yazdigimiz kod javascripte donusturulecek ise peki javascript varken niye typescript yaziyoruz? buyuk bir projede calistiginizi dusunun, projeye onlarca gelistiricinin dahil oldugunu. sizden bir "function" yazmanizi istediler, bu fonksiyon bir "true/false" yani boolean deger alacak, eger bu deger "true" ise ekrana "yes, you are correct :)'" yazacak ama eger "false" ise "no, you are wrong :(" yazacak.

    hemen javascript ile bu konudumuzu yazalim;

    function checkmyvalue(iscorrect) {
    console.log(iscorrect ? 'yes, you are correct :)' : 'no, you are wrong :(');
    }

    bu kodda hersey gayet net. sonra fonksiyonumuzu cagiralim;
    checkmyvalue(true);

    "yes, you are correct :)" yazdi. bir de "false" degerini test edelim'
    checkmyvalue(false);

    "no, you are wrong :(" ve kodumuz calisiyor. artik yayinlayabiliriz.

    sonra gun geldi projede calistigimiz gelistiricilerden bize geldi ve "senin yazdigin fonksiyona 'false' degerini gonderiyorum ama senin fonksiyonun bana 'yes, you are correct :)' diye yazi donuyor. yazdigin kod bozuk!" dedi. bu durumda koduna bakarsin yanlis birsey yok. sonra adama fonksiyonu nasil cagirdini sorarsin, ve ne gorursun;

    checkmyvalue('false');

    fonksiyonu cagiriyor ama boolean degerle degil, icinde 'false' yazan bir string ile cagiriyor. string 'false' ama bu stringin javascript de boolean degeri 'true' dur. yani yazdigin fonksiyonun bu parametreye donecegi deger "yes, you are correct :)" olur.

    adama gittin ve dedin ki "kardesim senin gonderdigin parametre yanlis". adam sana diyebilir ki "peki kardesim sen niye fonksiyonuna gelen degerin tipini kontrol etmedin". bu durumda kim hakli, hakli haksiz yok, cunku javascript esnek ve "typesafe" bir dil degil. bir fonksiyona diledigin tipte ve adette deger gonderebilirsin. bunun icin herhangi bir engel yok. bu gibi senaryolar icin en uygun cozumlerden biri ise typescript. eger typescript ile bu fonksiyon yazilmis olsaydi fonksiyonumuz su sekild olacakti;

    function checkmyvalue (iscorrect: boolean){
    console.log(iscorrect ? 'yes, you are correct :)' : 'no, you are wrong :(');
    }

    yani fonksiyonun imzasi diyor ki "ben sadece boolean deger alirim".

    artik bu fonksiyonu bir baska developer cagirirken "boolean" harici deger gondermeye kalkarsa, ornegin;

    checkmyvalue('false');

    calisma zamaninda degil de, typescript kodunun javascript koduna donusturulme sirasinda yani "transpiling" sirasinda su sekilde bir hata alirsiniz;

    "error ts2345: argument of type '"false"' is not assignable to parameter of type 'boolean'."

    yani kotu suprizlerle calisma sirasinda degil de cok daha once gelistirme sirasinda karsilasirsiniz ve buyuk problem yasamazsiniz. buyuk bir projede ve buyuk bir ekip ile calisanlar icin onemli bir durumdur bu.

    tabi bu "type safe" ozelligi typescript in bircok avantajindan sadece biri. ornegin bir object oriented programming ihtiyaclarindan biri "interface" ya da "encapsulation" icin gerekli olan "private". typescriptin bize sundugu bu kolayliklar elbette javascript ile de yazilabilir ama java ve c# gelistiricilerin asina oldugu sekilde degil de biraz da "vanilla js" diye tabir edilen klasik javascript yontemlerini takla attirarak yapilmasi gerekir.

    ornegin java ve c# gelistirirken cok defa yazdigimiz basit bir getter/setter ve encapsulation ornegini ele alalim. bu typescript ile su sekilde yazilir;

    class encapsulate {
    private secret : string;
    constructor(){
    this.secret = '';
    }
    set (value: string){
    this.secret = value;
    };
    get (){
    return this.secret;
    }
    }

    ama ayni kodu javascript ile su sekilde yazmamiz gerekir, ki pek goze hos gelen keyifli bir kod sayilmaz;

    var encapsulate = /** @class */ (function () {
    function encapsulate() {
    this.secret = '';
    }
    encapsulate.prototype.set = function (value) {
    this.secret = value;
    };
    ;
    encapsulate.prototype.get = function () {
    return this.secret;
    };
    return encapsulate;
    }());

    o nedenle typescript cok kritik degil, ama yazilan kod uzun vadeli, buyuk projeler icin yaziliyorsa ve o projeye bircok gelistirici dahil oluyorsa planlanan mimari tasarimdan cikmamak icin en etkili yollardan biridir.
  • generic sinif desteği ile birlikte öylesine temiz kodlar yazmama imkan sağlıyor ki kodu yazdığım ts dosyasını yalayasım geliyor.
  • bir dil degildir. bir superset tir.

    ayrica microsoft'un attigi kazikta degildir. microsoft'un ozellikle hali hazirda java && c# developerlari dusunerek, javascript e strongly typed ozelligi katmak icin yola cikmistir. bu sayede buyuk projelerde olmazsa olmaz olan design time ve runtime code generation ile kisitli da olsa reflection ozelligi kazandirmistir.

    kisaca microsoft esasen bu superset'i if then else yazanlar icin degil, daha derinlemesine yazilim muhendisligi prensiplerini kapsamasi icin gelistirmistir.
  • geçen microsoft'un bu dili neden ve nasıl yarattıkları ile ilgili belgeseli izledim ve sebeplerini dinleyince dumur oldum. işte c++/c# yazılım tabanını web'e taşırken js ile ölçeklemekte sorun yaşıyorlarmış, ayrıca type safety olmadığı için yeni bir dil yaratmak istemişler.

    e kardeşim bunu harfiyen yerine getiren seneler önce haxe diye transpiler bir dil yazıldı, yıllardır geliştirildi. microsoft olarak en babasından fonlayıp kullansaydın bunu. üstelik tek kod tabanıyla bilmem kaç tane dile transpile edebiliyor ki senin derdin sadece desktop yazılımları web'e ölçeklemek için js ile sorunlar yaşamanmış. işin komik tarafı haxe'nin en başarılı çeviri gerçekleştirdiği taraflardan birisidir js. dilin syntax yapısı da js ile çok benzer ve güçlüydü.

    işte microsoft olunca böyle antin kuntin sebeplere yeni bir dil yaratıp, endüstriye çivileyebiliyorsunuz. garibim beyaz yaka yazılımcımsı teknikerler de "abi çok rahat ya, type safety abi, hata yapınca beni uyarıyor " diye sevinirler.
  • anders hejlsberg aşağı yukarı şöyle açıklamış:

    dart, tamamen javascript'i yeniliyor. yeni bir programlama dili ve yeni bir sanal makine. kodunuzu javascript'e çevirebiliyorsunuz fakat bunu yaparken yeni bir dilin semantiğini alıp javascript'e benzetmeye çalışıyor. script# aynı şeyi c# için, google web toolkit ise java için yapıyor. bunu yaptıkları için karışıklığa ve maliyete sebep oluyorlar.

    typescript ise herşeyden önce aslında javascript, yeni bir dil öğrenmenize gerek yok, sadece parametrelerinize açıklamaları nasıl koyacağınızı öğrenmeniz yeterli ve bu o kadar da zor değil. ikinci ve asıl önemlisi öğrendiğiniz bu yeni şeyler ecmascript 6 ile uyumlu (javascript'in bir sonraki sürümü). yani aslında typescript öğrenirken, javascript öğreniyorsunuz. ayrıca tüm diğer javascript frameworklerini bu dille rahatlıkla kullanabilirsiniz.

    bu arada typescript açık kaynak kodlu bir proje.
    http://typescript.codeplex.com/

    açıklamanın tam metni:
    http://www.eweek.com/…tter-javascript-for-big-apps/
  • harikulade. typescript sen dev bir kedisin.
  • codefiction çatısı altında bir grup insan toplanmış ve bir typescript kitabını türkçeleştirme işine girişmişler:

    https://github.com/codefiction/typescript-book
    fork'layıp pr çekmek mutlu ediyormuş bu adamları. öyle diyorlar. manyaklar galiba.
  • google closure library veya jquery ile alakasi olmayan yeni-eski programlama dili.

    dart, actionscript3, coffeescript vs icerisinde bence (olusturdugu javascript kodunun okunabilir olmasi dolayisiyla) en cok coffeescript'e benziyor.

    coffeescript'ten daha iyi yonleri
    - static type destegi, derleme esnasinda typechecking
    - daha iyi tooling, intellisense, refactoring destegi vs.
    - syntax'i javascript'in syntaxinin superseti. o yuzden olusturdugu koddaki runtime hatalarin kaynagini bulmak coffeescript'e gore biraz daha kolay.
    - es6 (javascript'in bir sonraki versiyonu) ile muhtemelen uyumlu syntax'i olacak

    coffeescript'ten daha kotu yonleri
    - syntax'i javascript'in syntaxinin superseti, o yuzden o kadar guzel gorunmuyor. coffeescript kodu okumak daha zevkli
    - javascript'in bazi kotu yanlarini coffeescript gibi saklamiyor (mesela global variablelar)

    bence tutar bu.
  • faydasının yanında zararları da olan bir js superset. çoğu projenin bunu kullanmasına bile gerek yok bugünkü js işinizi çözmeye yarar, özellikle son dönemlerde ciddi birşekilde pohpohlanıyordu, gerekli gereksiz herkes projesine eklemeye calısıyordu derken dhh bugün herkesin ağzındaki baklayı cıkardı, çoğu projede götürüsü getirisinden fazla.

    zaten bu typescript saksocuları yüzünden, vuejs'de composition api diye çirkin iğrenç bir ucube cıkardı, kılım bu topluluğa
  • yıllardır typescript'i duymuş olmasına rağmen ancak yeni öğrenen kendimin kafasına sıçayım. typescript kullanmamak hakarettir, küfürdür. belki bir kaç sayfalık küçük ve bir daha üstünde çalışılmayacak bir projede kullanmamak çok sorun olmayabilir (ki bence gene de kullanın), fakat büyükçe yıllarca geliştirilecek tek js codebase'inde typescript kullanmamak > allah'a şirk koşmak. çimki allah affedebilir ama sonraki yazılımcı affetmez. yani kul hakkı > allah'ın hakkına girmek. uyurken kafamdan interface hayalleri kuruyorum. :)

    bu arada typescript sadece kodunuzu okunaklı vs yapmıyor. bizzat daha iyi kod yazmanızı da sağlıyor. mesela projenizde gece ve gündüz temaları olsun. temalar birer object.

    const gecetemasi = {backgroundcolor: "#fff", textcolor:"#000"}
    const gunduztemasi = {backgroundcolor: "#000", textcolor:"#fff"}

    bu şekilde her temada belki 100 tane key olacak. iki temanın da aynı keylere sahip olması gerekiyor. yoksa sorun yaşarsınız. yeni bir keye ihtiyacınız oldu diyelim. gecetemasi'na linkcolor keyini eklediniz. fakat gunduztemasi'na eklemeyi unutabilirsiniz. typescript ile tema interface'i oluşturursanız böyle bir sorun yaşamazsınız:

    interface tema {backgroundcolor: string, textcolor:string, linkcolor: string}

    temalara interface'i iliştiriyorsunuz:
    const gecetemasi: tema = {backgroundcolor: "#fff", textcolor:"#000", linkcolor:"blue"}
    const gunduztemasi: tema = {backgroundcolor: "#000", textcolor:"#fff"}

    böyle bir durumda ide direkt kod yazarken gunduztemasi'nda linkcolor'un eksik olduğunu söyleyecektir vsvs. dolayısıyla tpyescript çok büyük bir olay.

    her güzel şey gibi bunu da ilk öğrendiğinizde bir parça zorlanırsınız. belki bir kaç gün bir haftanız doc okumakla geçer. fakat günün sonunda öğrenirseniz ilerleyen zaman içerisinde kazanacağınız zaman tasarrufu ilk kaybettiğiniz bir haftanın binlerce katı olacaktır. bu nedenle typescript kullanmayan javascriptcileri kibar bir dille uyaracak bir topluluk kurmayı teklif ediyorum. iyi kodlamalar. :)
hesabın var mı? giriş yap