cari
Rumahhujung hadapan webtutorial jsFungsi Anotasi dalam Typescript

Annotating Functions in Typescript

Cara paling asas untuk menganotasi fungsi dalam skrip taip adalah seperti ini

function add(a: number, b: number): number{
 // logic
}

// or

const add = (a: number, b: number): number => {
    //logic
}

parameter pilihan dianotasi dengan param tanda soal? begini

function optional(a: number, b?: number){
    console.log(a)
}

Tetapi bagaimana pula dengan fungsi panggil balik, atau fungsi yang jenis hujah dan jenis pulangan berkaitan (dalam kes itu, generik).


Nilai Fungsi

Perhatikan fungsi JavaScript ini

function multiplier(factor){
    return value => factor * value
}

supaya kita boleh menggunakan fungsi seperti ini;

const n  = multiplier(6)
n(8) // 48

Nilai fungsi dianotasi dalam skrip taip seperti ini

(param1: type, param2: type)=> type

// or

const add: (a: number, b: number)=> number = function (a, b){
    return a + b
}

Jadi untuk menganotasi fungsi pengganda, kami mempunyai

function multiplier(factor: number): (value: number) => number{
    return value => factor * value
}

IDE anda (sebaik-baiknya) VSCode, secara automatik akan membuat kesimpulan jenis nilai (menjadi nombor) dalam logik fungsi


Fungsi generik

Anotasi fungsi ini salah

function pickFirst(array: Array<t>): T{
    return array[0]
}
</t>

Sememangnya ini menimbulkan ralat yang
Tidak dapat mencari nama T

oleh itu, format menganotasi fungsi generik ialah

function fnName <t>(param: T): U{
    //logic
}
</t>

Perhatikan di mana nama generik diisytiharkan. jadi, untuk menganotasi fungsi di atas dengan betul;

function pickFirst<t>(array: Array<t>): T{
    return array[0]
}
</t></t>

Sekarang berjaya.

Tetapi bagaimana pula dengan fungsi Generik yang mempunyai parameter fungsi.

Sebagai contoh, kami ingin menganotasi fungsi peta tersuai bernama myMap yang ditulis seperti ini dalam Javascript

function myMap(arr, fn){
    rreturn arr.map(fn)
}

Kita boleh membuat anotasi seperti ini

function myMap<input output>(arr: Input[], fn: (item: Input, index?: number) => Output): Output[]{
    return arr.map(fn)
}

Apa yang perlu kita perhatikan dalam coretan di atas ialah fungsi fn mengambil item daripada jenis tatasusunan Input yang sama dan mengembalikan jenis Output.

Bagaimana pula dengan kaedah Array.from() statik?

function myFrom<type>(iterable: Iterable<type>): Array<type>{
    // logic
}
</type></type></type>

atau kaedah array.filter()?

function myFilter<input>(arr: Input[], fn: (item: Input) => boolean): Input[]{
    return arr.filter(fn)
}

Kekangan generik

Anda juga boleh mengekang pembolehubah generik kepada jenis yang mempunyai sifat tertentu. Contohnya,

function pickInnerFirst<t extends number>(array: Array<t>): T{
    return array[0][0]
}
</t></t>

Fungsi ini memilih elemen pertama dalam tatasusunan 2 dimensi

Ini memastikan bahawa ia hanya berfungsi untuk tatasusunan dan rentetan (kebanyakannya) dengan cara yang

pickOne([12, 20, 30]) // wont work.

Kami juga boleh menggunakan antara muka

interface Lengthly{
    length: number;
}

function pickInnerFirst<t extends lengthly>(array: Array<t>): T{
    return array[0][0]
}
</t></t>

Antara Muka Fungsi

Sekiranya anda tidak tahu, Fungsi ialah objek dan ia mempunyai sifat

const add = (a, b) => a + b

console.log(add.toString()) //(a, b) => a + b

// also
console.log(Object.getPrototypeOf(add) == Function.prototype) //true
console.log(Object.getPrototypeOf(Function.prototype) == Object.prototype) //true

Contoh kedua menunjukkan bahawa fungsi tambah ialah anak Object.prototype (walaupun ia bukan anak langsung) dan oleh itu ialah objek.

Cukup lucu, anda boleh melampirkan sifat pada fungsi dalam JavaScript

function add(a: number, b: number): number{
 // logic
}

// or

const add = (a: number, b: number): number => {
    //logic
}

Coretan ini akan kembali

function optional(a: number, b?: number){
    console.log(a)
}

Perhatikan bahawa di A kami melampirkan sifat yang dipanggil perihalan pada fungsi yang hanya boleh dilakukan dengan objek.

Itu untuk membuat kesimpulan bahawa;

Objek boleh diterangkan dengan antara muka (biasanya). Untuk fungsi, ini juga mungkin. walau bagaimanapun, ia hanya sesuatu yang perlu anda pertimbangkan apabila anda menambah sifat istimewa pada fungsi anda.

function multiplier(factor){
    return value => factor * value
}

Pada ulasan A ialah tempat kami menerangkan hujah dan jenis pengembalian fungsi.

Jadi, untuk menganotasi kod terdahulu dalam skrip taip,

const n  = multiplier(6)
n(8) // 48

Perhatikan cara kami menggunakan antara muka dalam fungsi jeritan di A.


Mengapakah saya perlu memahami cara menganotasi fungsi dalam Typescript?

Nah, ia membantu dalam membina sistem jenis yang jauh lebih pintar yang seterusnya mengurangkan peluang anda dijangkiti pepijat. Jika anda sedang membina perpustakaan atau rangka kerja, anda mungkin perlu menggunakan beberapa atau kebanyakan konsep yang dinyatakan di sini.
Jika anda hanya menggunakan perpustakaan, konsep ini sebenarnya tidak diperlukan, walaupun ia boleh memberi anda pemahaman yang lebih mendalam tentang perpustakaan yang anda bekerjasama.

Sekiranya anda mempunyai sebarang soalan atau terdapat kesilapan dalam penulisan ini, sila kongsikan di ruangan komen di bawah ⭐

Atas ialah kandungan terperinci Fungsi Anotasi dalam Typescript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
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
Java vs JavaScript: Perbandingan terperinci untuk pemajuJava vs JavaScript: Perbandingan terperinci untuk pemajuMay 16, 2025 am 12:01 AM

JavaandjavascriptaredistinctLanguages: javaisusedforenterpriseandMobileApps, whilvascriptisforinteractivewebpages.1) javaisco mpiled, statiktyped, andrunsonjvm.2) javascriptisinterinterpreted, dinamicallytyped, andrunsinbrowsersornode.js.3) javausesoopwithcl

Jenis data JavaScript: Adakah terdapat perbezaan antara penyemak imbas dan nodej?Jenis data JavaScript: Adakah terdapat perbezaan antara penyemak imbas dan nodej?May 14, 2025 am 12:15 AM

Jenis data teras JavaScript adalah konsisten dalam penyemak imbas dan node.js, tetapi ditangani secara berbeza dari jenis tambahan. 1) Objek global adalah tetingkap dalam penyemak imbas dan global di Node.js. 2) Objek penampan unik Node.js, digunakan untuk memproses data binari. 3) Terdapat juga perbezaan prestasi dan pemprosesan masa, dan kod perlu diselaraskan mengikut persekitaran.

Komen JavaScript: Panduan untuk menggunakan // dan / * * /Komen JavaScript: Panduan untuk menggunakan // dan / * * /May 13, 2025 pm 03:49 PM

JavaScriptusestWotypesofcomments: Single-line (//) danMulti-line (//)

Python vs JavaScript: Analisis Perbandingan untuk PemajuPython vs JavaScript: Analisis Perbandingan untuk PemajuMay 09, 2025 am 12:22 AM

Perbezaan utama antara Python dan JavaScript ialah sistem jenis dan senario aplikasi. 1. Python menggunakan jenis dinamik, sesuai untuk pengkomputeran saintifik dan analisis data. 2. JavaScript mengamalkan jenis yang lemah dan digunakan secara meluas dalam pembangunan depan dan stack penuh. Kedua -duanya mempunyai kelebihan mereka sendiri dalam pengaturcaraan dan pengoptimuman prestasi yang tidak segerak, dan harus diputuskan mengikut keperluan projek ketika memilih.

Python vs JavaScript: Memilih alat yang sesuai untuk pekerjaanPython vs JavaScript: Memilih alat yang sesuai untuk pekerjaanMay 08, 2025 am 12:10 AM

Sama ada untuk memilih Python atau JavaScript bergantung kepada jenis projek: 1) Pilih Python untuk Sains Data dan Tugas Automasi; 2) Pilih JavaScript untuk pembangunan front-end dan penuh. Python disukai untuk perpustakaannya yang kuat dalam pemprosesan data dan automasi, sementara JavaScript sangat diperlukan untuk kelebihannya dalam interaksi web dan pembangunan stack penuh.

Python dan javascript: memahami kekuatan masing -masingPython dan javascript: memahami kekuatan masing -masingMay 06, 2025 am 12:15 AM

Python dan JavaScript masing -masing mempunyai kelebihan mereka sendiri, dan pilihan bergantung kepada keperluan projek dan keutamaan peribadi. 1. Python mudah dipelajari, dengan sintaks ringkas, sesuai untuk sains data dan pembangunan back-end, tetapi mempunyai kelajuan pelaksanaan yang perlahan. 2. JavaScript berada di mana-mana dalam pembangunan front-end dan mempunyai keupayaan pengaturcaraan tak segerak yang kuat. Node.js menjadikannya sesuai untuk pembangunan penuh, tetapi sintaks mungkin rumit dan rawan kesilapan.

Inti JavaScript: Adakah ia dibina di atas C atau C?Inti JavaScript: Adakah ia dibina di atas C atau C?May 05, 2025 am 12:07 AM

Javascriptisnotbuiltoncorc; it'saninterpretedlanguagethatrunsonenginesoftenwritteninc .1) javascriptwasdesignedasalightweight, interpratedlanguageforwebbrowsers.2)

Aplikasi JavaScript: Dari Front-End ke Back-EndAplikasi JavaScript: Dari Front-End ke Back-EndMay 04, 2025 am 12:12 AM

JavaScript boleh digunakan untuk pembangunan front-end dan back-end. Bahagian depan meningkatkan pengalaman pengguna melalui operasi DOM, dan back-end mengendalikan tugas pelayan melalui Node.js. 1. Contoh front-end: Tukar kandungan teks laman web. 2. Contoh backend: Buat pelayan Node.js.

See all articles

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

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Nordhold: Sistem Fusion, dijelaskan
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
<🎜> obscur: Ekspedisi 33 - Cara mendapatkan pemangkin Chroma yang sempurna
2 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

MinGW - GNU Minimalis untuk Windows

MinGW - GNU Minimalis untuk Windows

Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

MantisBT

MantisBT

Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.