Jadual Kandungan
1. Tandatangan fungsi
2. Fungsi terlebih beban
3. Kaedah terlebih beban
4. Bila hendak menggunakan lebihan fungsi
5. Ringkasan
Rumah hujung hadapan web tutorial js Bagaimana untuk menulis kelebihan fungsi dalam TypeScript? Pengenalan kepada penulisan

Bagaimana untuk menulis kelebihan fungsi dalam TypeScript? Pengenalan kepada penulisan

Dec 14, 2021 am 10:37 AM
javascript typescript kelebihan beban fungsi

Bagaimana untuk menulis lebihan fungsi dalam TypeScript? Artikel berikut akan memperkenalkan kepada anda cara menulis lebihan fungsi dalam TypeScript Saya harap ia akan membantu anda!

Bagaimana untuk menulis kelebihan fungsi dalam TypeScript? Pengenalan kepada penulisan

Kebanyakan fungsi menerima set parameter tetap.

Tetapi sesetengah fungsi boleh menerima bilangan argumen yang berubah-ubah, jenis argumen yang berbeza dan juga mengembalikan jenis yang berbeza bergantung pada cara anda memanggil fungsi tersebut. Untuk menganotasi fungsi tersebut, TypeScript menyediakan lebihan fungsi.

1. Tandatangan fungsi

Mari kita pertimbangkan dahulu fungsi yang mengembalikan mesej ucapan kepada orang tertentu.

function greet(person: string): string {
  return `Hello, ${person}!`;
}
Salin selepas log masuk

Fungsi di atas menerima 1 parameter jenis aksara: nama orang itu. Memanggil fungsi ini sangat mudah:

greet('World'); // 'Hello, World!'
Salin selepas log masuk

Bagaimana jika anda ingin menjadikan fungsi greet() lebih fleksibel? Sebagai contoh, biarkan ia juga menerima senarai orang untuk disambut.

Fungsi sedemikian akan menerima rentetan atau tatasusunan rentetan sebagai hujah dan mengembalikan rentetan atau tatasusunan rentetan.

Bagaimana untuk menganotasi fungsi sedemikian? Ada 2 cara.

Kaedah pertama adalah sangat mudah, iaitu mengubah suai terus tandatangan fungsi dengan mengemas kini parameter dan jenis pulangan. Inilah rupa greet() selepas pemfaktoran semula:

function greet(person: string | string[]): string | string[] {
  if (typeof person === 'string') {
    return `Hello, ${person}!`;
  } else if (Array.isArray(person)) {
    return person.map(name => `Hello, ${name}!`);
  }
  throw new Error('Unable to greet');
}
Salin selepas log masuk

Kini kita boleh memanggil greet() dalam dua cara:

greet('World');          // 'Hello, World!'
greet(['小智', '大冶']); // ['Hello, 小智!', 'Hello, 大冶!']
Salin selepas log masuk
Salin selepas log masuk

Kemas kini terus tandatangan fungsi untuk menyokong berbilang Kaedah panggilan ini adalah kaedah biasa dan baik.

Walau bagaimanapun, dalam sesetengah kes, kami mungkin perlu mengambil pendekatan lain dan menentukan secara individu semua cara fungsi anda boleh dipanggil. Pendekatan ini dipanggil overloading fungsi.

2. Fungsi terlebih beban

Kaedah kedua ialah menggunakan fungsi lebihan beban. Saya mengesyorkan pendekatan ini apabila tandatangan fungsi agak kompleks dan melibatkan pelbagai jenis.

Mentakrifkan lebihan fungsi memerlukan penentuan tandatangan lebihan dan tandatangan pelaksanaan.

Tandatangan beban lampau mentakrifkan parameter formal dan jenis pengembalian fungsi, tanpa badan fungsi. Fungsi boleh mempunyai berbilang tandatangan terlebih beban: sepadan dengan cara yang berbeza untuk memanggil fungsi.

Sebaliknya, tandatangan pelaksanaan juga mempunyai jenis parameter dan jenis pulangan, dan juga mempunyai badan fungsi pelaksanaan, dan hanya boleh ada satu tandatangan pelaksanaan.

// 重载签名
function greet(person: string): string;
function greet(persons: string[]): string[];
 
// 实现签名
function greet(person: unknown): unknown {
  if (typeof person === 'string') {
    return `Hello, ${person}!`;
  } else if (Array.isArray(person)) {
    return person.map(name => `Hello, ${name}!`);
  }
  throw new Error('Unable to greet');
}
Salin selepas log masuk

greet() Fungsi ini mempunyai dua tandatangan beban lampau dan tandatangan pelaksanaan.

Setiap tandatangan beban lampau menerangkan satu cara fungsi boleh dipanggil. Setakat fungsi greet(), kita boleh memanggilnya dalam dua cara: dengan parameter rentetan atau dengan parameter tatasusunan rentetan.

Tandatangan pelaksanaan function greet(person: unknown): unknown { ... } mengandungi logik yang sesuai untuk cara fungsi berfungsi.

Kini, seperti di atas, greet() boleh dipanggil dengan argumen jenis rentetan atau tatasusunan rentetan.

greet('World');          // 'Hello, World!'
greet(['小智', '大冶']); // ['Hello, 小智!', 'Hello, 大冶!']
Salin selepas log masuk
Salin selepas log masuk

2.1 Tandatangan terlebih beban boleh dipanggil

Walaupun tandatangan pelaksanaan melaksanakan gelagat fungsi, ia tidak boleh dipanggil secara langsung. Hanya tandatangan yang terlebih muatan boleh dipanggil.

greet('World');          // 重载签名可调用
greet(['小智', '大冶']); // 重载签名可调用

const someValue: unknown = 'Unknown';
greet(someValue);       // Implementation signature NOT callable

// 报错
No overload matches this call.
  Overload 1 of 2, '(person: string): string', gave the following error.
    Argument of type 'unknown' is not assignable to parameter of type 'string'.
  Overload 2 of 2, '(persons: string[]): string[]', gave the following error.
    Argument of type 'unknown' is not assignable to parameter of type 'string[]'.
Salin selepas log masuk

Dalam contoh di atas, walaupun tandatangan pelaksanaan menerima parameter unknown, fungsi unknown (greet(someValue)) tidak boleh dipanggil dengan parameter jenis greet().

2.2 Tandatangan pelaksanaan mestilah generik

// 重载签名
function greet(person: string): string;
function greet(persons: string[]): string[]; 
// 此重载签名与其实现签名不兼容。

 
// 实现签名
function greet(person: unknown): string {
  // ...
  throw new Error('Unable to greet');
}
Salin selepas log masuk

Fungsi tandatangan terlampau beban greet(person: string[]): string[] ditandakan sebagai tidak serasi dengan greet(person: unknown): string . Pelaksanaan

jenis pemulangan string yang ditandatangani tidak cukup generik dan tidak serasi dengan jenis pemulangan string[] yang ditandatangani terlebih muatan.

3. Kaedah terlebih beban

Walaupun dalam contoh sebelumnya, lebihan fungsi digunakan pada fungsi biasa. Tetapi kita juga boleh membebankan kaedah

Dalam selang kelebihan beban kaedah, tandatangan terlebih muatan dan tandatangan pelaksanaan adalah sebahagian daripada kelas.

Sebagai contoh, kami melaksanakan kelas Greeter dengan kaedah terlebih beban greet(). Kelas

class Greeter {
  message: string;
 
  constructor(message: string) {
    this.message = message;
  }
 
  // 重载签名
  greet(person: string): string;
  greet(persons: string[]): string[];
 
  // 实现签名
  greet(person: unknown): unknown {
    if (typeof person === 'string') {
      return `${this.message}, ${person}!`;
    } else if (Array.isArray(person)) {
      return person.map(name => `${this.message}, ${name}!`);
    }
    throw new Error('Unable to greet');
  }
Salin selepas log masuk

Greeter mengandungi greet() kaedah terlebih beban: 2 tandatangan terlebih beban yang menerangkan cara memanggil kaedah dan tandatangan pelaksanaan yang mengandungi pelaksanaan yang betul

Kaedah wajar terlebih muatan, kita boleh memanggil hi.greet() dalam dua cara: menggunakan rentetan atau menggunakan tatasusunan rentetan sebagai parameter.

const hi = new Greeter('Hi');
 
hi.greet('小智');       // 'Hi, 小智!'
hi.greet(['王大冶', '大冶']); // ['Hi, 王大冶!', 'Hi, 大冶!']
Salin selepas log masuk

4. Bila hendak menggunakan lebihan fungsi

Lebih muatan fungsi, jika digunakan dengan betul, boleh meningkatkan kebolehgunaan fungsi yang boleh dipanggil dalam pelbagai cara . Ini amat berguna semasa autolengkap: kami menyenaraikan semua kemungkinan lebihan dalam autolengkap.

Walau bagaimanapun, dalam beberapa kes adalah disyorkan untuk tidak menggunakan lebihan fungsi dan sebaliknya menggunakan tandatangan fungsi.

Sebagai contoh, jangan gunakan lebihan fungsi untuk parameter pilihan:

// 不推荐做法
function myFunc(): string;
function myFunc(param1: string): string;
function myFunc(param1: string, param2: string): string;
function myFunc(...args: string[]): string {
  // implementation...
}
Salin selepas log masuk

Adalah memadai untuk menggunakan parameter pilihan dalam tandatangan fungsi:

// 推荐做法
function myFunc(param1?: string, param2: string): string {
  // implementation...
}
Salin selepas log masuk

5. Ringkasan

Fungsi berlebihan dalam TypeScript membolehkan kami mentakrifkan fungsi yang dipanggil dalam pelbagai cara.

Menggunakan lebihan fungsi memerlukan penentuan tandatangan lebihan: satu set fungsi dengan parameter dan jenis pulangan, tetapi tiada isi. Tandatangan ini menunjukkan bagaimana fungsi itu harus dipanggil.

Selain itu, anda mesti menulis pelaksanaan yang betul (tandatangan pelaksanaan) fungsi: parameter dan jenis pulangan, dan badan fungsi . Ambil perhatian bahawa tandatangan pelaksanaan tidak boleh dipanggil.

Selain fungsi biasa, kaedah dalam kelas juga boleh dibebankan.

Alamat asal bahasa Inggeris: https://dmitripavltin.com/typeript-function-overloading/

Pengarang: dmitripavlutin

Penterjemah: front-end Xiaozhi

Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati: Pengenalan kepada Pengaturcaraan! !

Atas ialah kandungan terperinci Bagaimana untuk menulis kelebihan fungsi dalam TypeScript? Pengenalan kepada penulisan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk membezakan lebihan fungsi dan menulis semula dalam C++ Bagaimana untuk membezakan lebihan fungsi dan menulis semula dalam C++ Apr 19, 2024 pm 04:21 PM

Kelebihan beban fungsi membenarkan fungsi dengan nama yang sama tetapi tandatangan berbeza dalam kelas, manakala mengatasi fungsi berlaku dalam kelas terbitan apabila ia mengatasi fungsi dengan tandatangan yang sama dalam kelas asas, memberikan tingkah laku yang berbeza.

Lebih memuatkan dan menulis semula fungsi PHP Lebih memuatkan dan menulis semula fungsi PHP Apr 26, 2024 pm 05:12 PM

Kelebihan beban dan penulisan semula fungsi disokong dalam PHP untuk mencipta kod yang fleksibel dan boleh digunakan semula. Kelebihan beban fungsi: membenarkan penciptaan fungsi dengan nama yang sama tetapi parameter berbeza, dan memanggil fungsi yang paling sesuai berdasarkan padanan parameter. Penulisan semula fungsi: Benarkan subkelas mentakrifkan fungsi dengan nama yang sama dan mengatasi kaedah kelas induk Apabila kaedah subkelas dipanggil, ia akan mengatasi kaedah kelas induk.

Bagaimana untuk melaksanakan lebihan fungsi dalam golang? Bagaimana untuk melaksanakan lebihan fungsi dalam golang? Apr 29, 2024 pm 05:21 PM

Bahasa Go tidak menyokong lebihan fungsi tradisional, tetapi kesan serupa boleh dicapai melalui kaedah berikut: menggunakan fungsi bernama: mencipta nama unik untuk fungsi dengan parameter yang berbeza atau jenis pulangan menggunakan generik (Go1.18 dan ke atas): mencipta nama unik untuk pelbagai jenis parameter Satu versi fungsi.

Amalan terbaik untuk kelebihan beban fungsi C++ Amalan terbaik untuk kelebihan beban fungsi C++ Apr 20, 2024 am 10:48 AM

Amalan terbaik untuk lebihan fungsi C++: 1. Gunakan nama yang jelas dan bermakna 2. Elakkan terlalu banyak beban 3. Pertimbangkan parameter lalai 5. Gunakan SFINAE.

Mengapa tiada fungsi lebihan beban dalam golang? Mengapa tiada fungsi lebihan beban dalam golang? Apr 30, 2024 am 10:54 AM

Lebihan muatan fungsi tidak dibenarkan dalam bahasa Go atas sebab-sebab berikut: Permudahkan pelaksanaan pengkompil Tingkatkan kebolehbacaan kod dan elakkan konflik nama Dalam Go, anda boleh menggunakan senarai atau antara muka parameter berubah-ubah untuk mencapai tingkah laku yang serupa dengan lebihan fungsi.

Adakah lebihan fungsi C++ dikenakan kepada pembina dan pemusnah? Adakah lebihan fungsi C++ dikenakan kepada pembina dan pemusnah? Apr 14, 2024 am 09:03 AM

Pembina C++ menyokong beban berlebihan, tetapi pemusnah tidak. Pembina boleh mempunyai senarai parameter yang berbeza, manakala pemusnah hanya boleh mempunyai senarai parameter kosong kerana ia dipanggil secara automatik apabila memusnahkan contoh kelas tanpa parameter input.

Apakah senario aplikasi kelebihan beban fungsi C++ dalam projek sebenar? Apakah senario aplikasi kelebihan beban fungsi C++ dalam projek sebenar? Apr 26, 2024 pm 01:57 PM

Lebihan beban fungsi membolehkan fungsi dengan nama yang sama ditakrifkan secara berbeza dalam C++, mengendalikan jenis argumen yang berbeza atau melaksanakan operasi yang berbeza. Senario aplikasi khusus termasuk: memproses jenis data yang berbeza untuk menyediakan fungsi yang berbeza untuk meningkatkan kebolehbacaan kod

Apakah peraturan padanan untuk kelebihan beban fungsi C++? Apakah peraturan padanan untuk kelebihan beban fungsi C++? Apr 27, 2024 am 08:27 AM

Peraturan pemadanan lampau fungsi C++ adalah seperti berikut: padankan nombor dan jenis parameter dalam panggilan. Susunan parameter mestilah konsisten. Constness dan pengubah rujukan mesti sepadan. Parameter lalai boleh digunakan.

See all articles