Typescript varsayılan özellik değeri stil rehberi


Varsayılan özellik değerlerinin nasıl ayarlanacağını tanımlayan herhangi bir stil kılavuzu var mı? Umarım resmi olan.

class MyClass {
    public foo = 'asdf';
}

ve

class MyClass {
    public foo: string;
    constructor() {
        this.foo = 'asdf';
    }
}

her ikisi de derlenir

var MyClass = /** @class */ (function () {
    function MyClass() {
        this.foo = 'asdf';
    }
    return MyClass;
}());

Birinci daha temiz ve C#'a benzer, ancak ikinci derlenmiş çıktının sözdizimine (ve oluşturulmuşsa tanım dosyasına) daha yakındır ve özellik tipi açıktır.

https://www.typescriptlang.org/docs/home.html, https://github.com/Microsoft/TypeScript/wiki/Coding-guidelines ve https://angular.io/guide/styleguide adreslerine baktım

Cevap #1

Bunun nerede olduğunu belirten bir "resmî" stil rehberi bildiğimi sanmıyorum.

ES2015'ten bu yana sınıflar JavaScript'in bir parçasıdır. Eğer TypeScript hedef sürümünüz ES6 veya daha yenisi ise, yukarıdakilerin ikisi de derlenir

class MyClass {
    constructor() {
        this.foo = 'asdf';
    }
}

Ayrıca, JavaScript'teki sınıf alanları şu anda (Temmuz 2017 itibarıyla) Aşama 3 önerisidir, bu da dilin içine sonunda dahil olma olasılıklarının yüksek olduğu anlamına gelir. Bu nedenle, nihayetinde derlenmiş çıktı şöyle olabilir:

class MyClass {
    foo = 'asdf';
}

Bütün bunlar, TS kodunuzun derlenmiş JS’e "daha yakın" olması konusunda fazla endişelenmemeniz gerektiğini belirtmek için benim yolumdur; çünkü bu fark sonunda kaybolacak ve o zamana kadar, TypeScript’in amaçlarından biri de size yarının JavaScript özelliklerini bugün kullanma imkanı sunmaktır. TypeScript El Kitabı'ndan:

TypeScript'te, geliştiricilerin artık bu teknikleri kullanmasına izin veriyoruz ve bunları, JavaScript'in bir sonraki sürümünü beklemek zorunda kalmadan, tüm büyük tarayıcılar ve platformlarda çalışan JavaScript'e derliyoruz.

Tamam, bu yüzden benim önerim ("resmî" değil) şunu yapmak:

class MyClass {
    public foo: string = 'asdf';
}

Özellik türünü açıkça belirttiniz ve bunu bir sınıf alanı olarak başlattınız. Her iki dünyanın en iyisi, değil mi? Belki?

Her neyse, umarım bu yardımcı olur; iyi şanslar!