Saya melanjutkan kelas baharu daripada kelas asas dan menambah beberapa sifat. Bagaimana untuk membuat contoh kelas terbitan menggunakan kelas asas yang diberikan (termasuk sifat yang dilampirkan)?
Kod ini berfungsi tetapi menghantar jenis kelas dan bukan jenis selamat
// Base class is imported from a package. Not editable class BaseClass { public x: number; public power() { return this.x * 2; } } export interface CustomClass extends BaseClass { value: number; } function createCustomClass(base: BaseClass, myValue: number): CustomClass { // it's not type safe to cast this variable // How to do it the right way in Typescript? const result: CustomClass = base as CustomClass; result.value = myValue; return result; }
Saya tidak fikir adalah mungkin untuk menolak sepenuhnya penyiapan taip menggunakan pendekatan anda, tetapi jika anda menggunakan
type Guard
检查变量result
是否有效CustomClass
(在我的实现中是isCustomClass
) ia akan selamat: p>Anda boleh menggunakan kaedah
Object.assign ()
untuk menambah sifat pada objek sasaran. Kaedah ini mengembalikan objek sasaran dan tandatangan panggilannya dalam perpustakaan TypeScript yang merupakan persimpangan jenis input.Ini bermakna
createCustomClass()
anda boleh dilaksanakan seperti ini:Jenis pulangan adalah
BaseClass & {value: number}
,其结构与CustomClass
sama, jadi fungsi menyusun tanpa ralat dan tidak ada penegasan jenis yang diperlukan.Pautan kod taman permainan p>