Typescript: Jenis pernyataan untuk literal string berhenti bekerja

Dibuat pada 12 Sep 2016  ·  3Komentar  ·  Sumber: microsoft/TypeScript

Versi TypeScript: 2.1.0-dev.20160912

Kode

// A *self-contained* demonstration of the problem follows...
const types = {
    test: <'test'>'test',
    test2: 'test2' as 'test2'
} // type: {test: string, test2:string}

let a = <'test'>'test'  // type string

Mungkin terkait dengan: https://github.com/Microsoft/TypeScript/pull/10676

Bug Fixed

Komentar yang paling membantu

@ Wallverb Setuju, alangkah baiknya memiliki bentuk sintaks _some_ untuk menunjukkan Anda tidak ingin melebar tanpa harus menyatakan jenisnya secara eksplisit. Namun terlepas dari itu, untuk alasan kompatibilitas mundur kita harus mengizinkan pernyataan tipe memiliki arti itu.

Semua 3 komentar

Ya, ini terkait dengan # 10676. Sebelumnya, string literal akan memiliki tipe literal hanya dalam "konteks literal" tertentu (seperti setelah pernyataan tipe) dan kita hanya akan menggunakan tipe ekspresi yang tepat sebagai tipe simpulan dari properti literal objek. Sekarang, string literal selalu memiliki tipe literal dan sebagai gantinya kita _widen_ types ketika mereka disimpulkan untuk lokasi yang bisa berubah (seperti properti literal objek). Jadi, dalam contoh Anda, pernyataan tipe tidak berpengaruh (a) karena literal string sudah merupakan tipe literal dan (b) karena kita memperluas hasil dari seluruh ekspresi setelah pernyataan tipe.

Untuk kompatibilitas mundur yang lebih baik, kita bisa mempertimbangkan _not_ memperluas tipe yang disimpulkan ketika ekspresi penginisialisasi adalah pernyataan tipe. Lagi pula, apa gunanya pernyataan tipe sebaliknya?

@ahejlsberg Terima kasih atas tanggapannya.

Akan sangat bagus jika Anda bisa mempertimbangkan _tidak_ memperluas tipe yang disimpulkan ketika ekspresi penginisialisasi adalah pernyataan tipe - dan setuju - itulah inti dari pernyataan tipe :)

Kasus umum lain yang akan berhenti berfungsi tanpanya adalah:

function test(style: { align: 'left' | 'right', size: number }) {
}

const style = {
    align: 'left' as 'left',
    size: 5
}

test(style)

Sintaks untuk tipe literal https://github.com/Microsoft/TypeScript/issues/10195 akan membantu - tetapi saya tidak yakin apakah itu akan menjadi kenyataan

Terima kasih banyak untuk semuanya

@ Wallverb Setuju, alangkah baiknya memiliki bentuk sintaks _some_ untuk menunjukkan Anda tidak ingin melebar tanpa harus menyatakan jenisnya secara eksplisit. Namun terlepas dari itu, untuk alasan kompatibilitas mundur kita harus mengizinkan pernyataan tipe memiliki arti itu.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

MartynasZilinskas picture MartynasZilinskas  ·  3Komentar

weswigham picture weswigham  ·  3Komentar

Antony-Jones picture Antony-Jones  ·  3Komentar

blendsdk picture blendsdk  ·  3Komentar

jbondc picture jbondc  ·  3Komentar