ค้นหาเว็บไซต์

Typescript Postmessage ล้มเหลวเมื่อมีอาร์กิวเมนต์หนึ่งตัว และสองตัว


มีโปรเจกต์ Typescript

เมื่อสิ่งนี้: postMessage(result);

ฉันเข้าใจเรื่องนี้

คาดว่าจะมีอาร์กิวเมนต์ 2-3 ตัว แต่ได้รับ 1 ตัว คาดว่าจะมีอาร์กิวเมนต์ 2-3 ตัว แต่ได้รับ 1 ตัว

เมื่อสิ่งนี้: postMessage(result, '*');

ฉันเข้าใจเรื่องนี้

Uncaught TypeError: Failed to execute 'postMessage' on 'DedicatedWorkerGlobalScope': Overload resolution failed.
    at runParser

Typescript ต้องการอะไรที่นี่? มันต้องการอาร์กิวเมนต์หนึ่งตัวหรือสองตัว? และทำไมถึงเกิดปัญหานี้?

คำตอบ #1

ถ้าคุณกำลังใช้ฟังก์ชัน postMessage ของ port ใน MessageChannel คุณก็ต้องส่งพารามิเตอร์เพียงตัวเดียวเท่านั้น

event.ports[0].postMessage(data)

ถ้าคุณกำลังใช้ window.postMessage คุณต้องส่งพารามิเตอร์ 2 หรือ 3 ตัว

window.postMessage(data, origin, [transfer])

คำตอบ #2

คุณจะต้องเพิ่ม webworker ใน tsconfig.json ของคุณหรือสร้างโปรเจกต์ TS แยกสำหรับ worker ของคุณ เนื่องจาก postMessage มี API ที่แตกต่างกันใน worker และในสภาพแวดล้อมของเบราว์เซอร์

"compilerOptions" : {
    "lib": [
        "webworker"

บทความที่เกี่ยวข้อง