Tslint: penyebaran objek tidak boleh disukai ketika argumen pertama Object.assign adalah instance kelas

Dibuat pada 25 Mei 2017  ·  3Komentar  ·  Sumber: palantir/tslint

Laporan Bug

  • __TSLint versi__: 5.3

Kode TypeScript sedang dilinting

value = Object.assign(new Model(), value)

dengan prefer-object-spread diaktifkan

Perilaku sebenarnya

kegagalan serat, perbaikan otomatis untuk menggunakan penyebaran objek

Perilaku yang diharapkan

Tidak ada apa-apa. aturan ini harus mengabaikan kasus di mana argumen pertama ke Object.assign adalah instance kelas.

  • jika --project diberikan, kita dapat memeriksa apakah tipe argumen pertama adalah seperti kelas
  • jika tidak ada proyek yang diberikan dan kami hanya melakukan pemeriksaan sintaksis, yang terbaik yang dapat kami lakukan adalah memeriksa new ... dan mengabaikan ekspresi

seperti yang dilaporkan di https://github.com/palantir/tslint/issues/2618#issuecomment -303879255

Fixed Bug

Komentar yang paling membantu

Jika argumen pertama bukan literal objek, aturan hanya menghasilkan kesalahan jika hasilnya ditetapkan ke sesuatu.
Menetapkan nilai kembalian Object.assign hanya masuk akal jika argumen pertama adalah CallExpression, NewExpression atau serupa. Segala sesuatu yang lain, misalnya Identifier atau PropertyAccessExpression masih harus error.
Dan itu tidak memerlukan pemeriksa tipe.

Semua 3 komentar

Object.assign memiliki efek samping pada argumen pertamanya. (Itulah sebabnya TypeScript mentranspilasikan { ...x, ...y } menjadi Object.assign({}, x, y) .) Aturan hanya boleh diaktifkan jika argumen pertama adalah literal objek baru.

Aturan hanya boleh aktif jika argumen pertama adalah literal objek baru.

Nah, secara teknis, Anda benar. Tetapi saya sering melihat kesalahan di mana programmer tidak berhati-hati tentang efek samping pada argumen pertama dan mereka tetap memberikan nilai non-literal ketika mereka _sebenarnya_ bermaksud melakukan hal yang sama dengan penyebaran objek. Jadi saya masih ingin aturan ini menangkap itu. Mungkin bisa jadi pilihan...

Jika argumen pertama bukan literal objek, aturan hanya menghasilkan kesalahan jika hasilnya ditetapkan ke sesuatu.
Menetapkan nilai kembalian Object.assign hanya masuk akal jika argumen pertama adalah CallExpression, NewExpression atau serupa. Segala sesuatu yang lain, misalnya Identifier atau PropertyAccessExpression masih harus error.
Dan itu tidak memerlukan pemeriksa tipe.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat