javascript - שגיאת תחביר לא נתפסת: מזהה בלתי צפוי (Typescript לפיתוח צד קדמי ללא מסגרת)


תיאור הפרויקט

התחלתי פרויקט שהוא קנבס HTML בסיסי, ללא מסגרות, וחשבתי שאשתמש ב-Typescript בגלל בדיקת הסוגים ובגלל שכבר השתמשתי בזה קודם עם React.
יש לי את קובץ ה-HTML הבסיסי הבא כדי לאתחל את הקנבס והסקריפט:

<html>
<head>
    <title>Interpolerende Veeltermen</title>
</head>
<body>
    <canvas id="canvas" height="1000px" width="1000px"></canvas>
    <script type="text/javascript" src="./build/main.js"></script>
</body>

כפי שאתה יכול לראות, אני טוען סקריפט שנקרא main.js בתיקייה build. תיקיית build הזו מכילה את כל קוד ה-TypeScript המומרים שלי (עם tsc).

נושא

כשאני מפעיל שרת ופותח את האתר ב-Chrome, אני מקבל את השגיאה הבאה:

Uncaught SyntaxError: Unexpected identifier

זה מתייחס לשורה 1 של הקובץ שלי main.js (שזה הסקריפט הראשון ש- index.html שלי קורא לו). שורה זו היא הפקודת ה-import הבאה:

import InterpolatingPolynomial from "./curves/InterpolatingPolynomial";

מה שניסיתי

ניסיתי לשנות את הקובץ tsconfig.json שלי. הוא מכיל כרגע את המידע הבא:

{
    "compilerOptions": {
        "outDir": "./build",
        "module": "esnext",
        "lib": ["esnext", "es7", "es6", "dom"],
        "target": "es6"
    },
    "exclude": ["node_modules"]
}

שיחקתי עם אפשרויות שונות של module ו-target אבל ללא הצלחה.

ראיתי כמה שאלות אחרות על הבעיה הזו, אבל אף אחד מהפתרונות לא נראה שעובד בשבילי. רובם השתמשו ב-Webpack, שיכול להיות הסיבה לכך. אבל אם מסתבר שפיספסתי שאלה ב-SO שתעזור לי, סמן אותה ככפולה בוודאות :)

ערוך

כאמור בתחילה, התיקיה build מכילה את כל קוד ה-TypeScript המורכב. אז כן, הקובץ שאני מתייחס אליו בקובץ ה-HTML שלי הוא אכן קובץ Javascript, ולא קובץ TypeScript. המרתי אותו באמצעות tsc.

תשובה #1

אתה לא יכול להריץ קבצי .ts ישירות, אתה צריך לקמפל אותם לגרסה שהדפדפן יכול להבין; ES4.

אנא עיינו בתיעוד כאן:

טייפסקריפט ובייבל

תשובה #2

הייתי צריך להשתמש ב-type= "module" בתגית הסקריפט שלי. זה פתר את הבעיה המקורית:

<script type="module" src="./build/main.js"></script>

בגלל כמה בעיות שנתקלתי בהן בשימוש בפקודות import, החלטתי גם להשתמש ב-bundler: Parcel. ניתן להשתמש בזה כדי לתרגם TS ל-JS ללא כל הגדרה. אין גם צורך להשתמש במאפיין type כשמשתמשים ב-Parcel.