js 'types' สามารถใช้ได้เฉพาะในไฟล์. ts - Visual Studio Code โดยใช้ @ ts-check


112

ฉันกำลังเริ่มใช้ TypeScript ในโครงการ Node ที่ฉันกำลังทำใน Visual Studio Code ฉันต้องการทำตามกลยุทธ์ "เลือกใช้" ซึ่งคล้ายกับ Flow ดังนั้นฉันจึงวางไว้// @ts-checkที่ด้านบนสุดของ.jsไฟล์โดยหวังว่าจะเปิดใช้ TS สำหรับไฟล์นั้น ในที่สุดฉันก็ต้องการประสบการณ์ "linting" แบบเดียวกับ Flow ดังนั้นฉันจึงติดตั้งปลั๊กอินTSLintเพื่อให้ฉันเห็นคำเตือน / ข้อผิดพลาดของ Intellisense

แต่ด้วยไฟล์ของฉันดูเหมือน:

// @ts-check

module.exports = {
  someMethod: (param: string): string => {
    return param;
  },
};

และtsconfig.jsonไฟล์ของฉันดูเหมือน ...

{
  "compilerOptions": {
      "target": "es2016",
      "module": "commonjs",
      "allowJs": true
  }
}

ฉันได้รับข้อผิดพลาดนี้: [js] 'types' can only be used in a .ts file.ดังที่แสดงด้านล่างในภาพ

ข้อผิดพลาดจาก vscode สำหรับ ts

ฉันเห็นคำถามนี้ซึ่งแนะนำให้ปิดใช้งานการตรวจสอบความถูกต้องของจาวาสคริปต์ใน vscode แต่นั่นก็ไม่ได้แสดงข้อมูล TypeScript Intellisense ใด ๆ

ฉันพยายามตั้งค่าtslint.jsEnableเป็นtrueในการตั้งค่า vscode ตามที่ระบุไว้ในเอกสารส่วนขยาย TSLint แต่ไม่มีโชค

อะไรคือการตั้งค่าที่ถูกต้องเพื่อใช้.jsไฟล์กับ TypeScript และรับ Intellisense ดังนั้นฉันจึงรู้ว่าข้อผิดพลาดในโค้ดของฉันคืออะไรก่อนที่ฉันจะรันคำสั่ง TS


คุณมีข้อผิดพลาดหรือไม่ถ้าคุณเปลี่ยนนามสกุลเป็น ts?
Israel Zinc

@ israel.zinc เปลี่ยนส่วนขยายเพื่อ.tsแสดงข้อผิดพลาด / คำเตือน TS ตามที่คาดไว้ ฉันเดาว่ามันใช้งานได้ แต่ฉันหวังว่าจะมีวิธีการเลือกใช้มากขึ้นโดยใช้@ts-checkส่วนขยายทั้งหมดของฉันเป็น.js
เจมส์


@ BuZZ-dEE อาจเป็นได้ แต่คำตอบไม่สามารถแก้ปัญหาได้ ฉันพูดถึงสิ่งนี้ในคำถามเดิมของฉัน
เจมส์

คำตอบ:


210

ฉันใช้@flowกับ vscode แต่มีปัญหาเดียวกัน

ฉันแก้ไขด้วยขั้นตอนนี้:

  1. ติดตั้งส่วนขยายFlow Language Support
  2. ปิดการใช้งานส่วนขยาย TypeScript ในตัว:

วิธีปิดใช้งาน TypeScript ในตัว:

  1. ไปที่แท็บส่วนขยาย
  2. ค้นหา@builtin TypeScript และ JavaScript Language Features
  3. คลิกที่ปิดการใช้งาน

5
คำตอบที่ยอมรับนั้นไม่ถูกต้องเสมอไป มีข้อผิดพลาดใน VSCode พร้อม React Native และ Flow ที่ให้ข้อความเดียวกันในไฟล์. js และในกรณีนี้คุณไม่ควรเปลี่ยนเป็น. ts แต่ดำเนินการต่อด้วย. js และแก้ไขปัญหาตามที่แนะนำไว้ที่นี่ !!
pashute

111
เพียงแค่ FYI: การปิดใช้งานส่วนขยายนี้โดยพื้นฐานแล้วจะลบล้างสิ่งที่ดีทั้งหมดเกี่ยวกับการพัฒนา JS ด้วย VSCode แต่คุณควรเพิ่มสิ่งต่อไปนี้ลงในไฟล์ json การตั้งค่าของคุณ: "javascript.validate.enable": false
heez

2
ตามที่ @heez ได้กล่าวถึงสิ่งนี้จะส่งผลต่อการค้นหาการอ้างอิงถึงไฟล์ javascript การเติมข้อความอัตโนมัติและอื่น ๆ จะไม่ปิดใช้งานคุณสมบัติภาษา Javascript
Ajitsen

2
คำตอบที่ถูกต้องกล่าวโดย @heez
Asim Olmez

1
@heez ขอบคุณสำหรับการบันทึกฉันค้นพบ ไม่มีข้อผิดพลาดในขณะนี้ สามารถใช้ Visual studio code ได้ในที่สุด
Anish Arya

97

ใช้"javascript.validate.enable": falseในการตั้งค่า VS Code ของคุณจะไม่ปิดใช้งาน ESLINT ฉันใช้ทั้ง ESLINT & Flow เพียงทำตามคำแนะนำFlow For Vs Code Setup

เพิ่มบรรทัดนี้ใน settings.json ช่วย "javascript.validate.enable": false


4
ด้วยสิ่งนี้คุณไม่จำเป็นต้องปิดการใช้งาน typescript ทั้งสองสามารถมีอยู่ ทางออกที่ดีที่สุด!
Nirus

2
หากคุณใช้ ESLint เพื่อตรวจสอบ Javascript ของคุณคำตอบนี้เป็นทางออกที่ดีที่สุด ข้อมูลเพิ่มเติม: code.visualstudio.com/docs/languages/…และgithub.com/flowtype/flow-for-vscode#setup
Beau Smith

1
ฉันจะหาไฟล์ settings.json ได้ที่ไหน?
i18n

1
สวัสดี @ i18n ไปที่: Code -> Preferences -> Settings -> Extensions -> เลื่อนลงและค้นหา "Edit in settings.json" ที่จริงพบหนึ่งภายใต้นี้: Include Languages Enable Emmet abbreviations in languages that are not supported by default. Add a mapping here between the language and emmet supported language. E.g.: {"vue-html": "html", "javascript": "javascriptreact"}คลิกที่แก้ไขใน settings.json "javascript.validate.enable": falseและเพิ่มนี้:
Fotis Tsakiris

1

คุณต้องใช้.tsไฟล์ - เช่นtest.tsเพื่อรับการตรวจสอบความถูกต้องของ typescript , intellisensetypingของ vars, return types รวมถึงการตรวจสอบข้อผิดพลาด "typed" (เช่นการส่ง a stringไปยัง method ที่คาดว่าnumberparam จะผิดพลาด)

มันจะถูกส่งไปยัง (มาตรฐาน) .js ทางtsc .


ปรับปรุง (11/2018):

จำเป็นต้องมีการชี้แจงโดยพิจารณาจากการลงคะแนนความคิดเห็นที่เป็นประโยชน์และคำตอบอื่น ๆ

types

  • ได้คุณสามารถtypeตรวจสอบ VS Code ใน.jsไฟล์ด้วย@ts-check- ดังที่แสดงในภาพเคลื่อนไหว

  • สิ่งที่ฉันอ้างถึงสำหรับtypescript ในตอนแรก typesนั้นเป็นสิ่ง.tsที่ไม่เหมือนกัน:

    hello-world.ts

    function hello(str: string): string {
      return 1;
    }
    
    function foo(str:string):void{
       console.log(str);
    }
    

    นี้จะไม่คอมไพล์ Error: Type "1" is not assignable to String

  • หากคุณลองใช้ไวยากรณ์นี้ในไฟล์Javascript hello-world.js :

    //@ts-check
    
    function hello(str: string): string {
      return 1;
    }
    
    function foo(str:string):void{
       console.log(str);
    }
    

    ข้อความแสดงข้อผิดพลาดที่อ้างอิงโดย OP จะแสดง: [js] 'types' can only be used in a .ts file

หากมีบางสิ่งที่ฉันพลาดไปซึ่งครอบคลุมถึงเรื่องนี้รวมถึงบริบทของ OP โปรดเพิ่ม ขอให้ทุกคนเรียนรู้


ฉันพบบทความสองสามข้อที่แนะนำให้คุณใช้คุณสมบัติทั้งหมดของ TS ภายในไฟล์ JS นี่คือหนึ่งในนิตยสาร Smashingซึ่งเป็นฉบับ GitHub สำหรับ vscodeที่อธิบายการตั้งค่าและบันทึกประจำรุ่นสำหรับ vscode
เจมส์

@ jamez14 ฉันไม่ได้พยายาม / มีความจำเป็นที่จะไม่ได้.tsใช้งาน IINM ตัวอย่างแสดงการตรวจสอบข้อผิดพลาดและIntelliSense ปัญหาที่คุณมีคือ (คงที่) typeไอเอ็นจีตัวแปรของคุณและกลับมาtypesเป็นอย่างดี - เช่นfoo:string, bar:number, fubar:MyClass, ,myMethod(f:Array):void anotherMethod():stringHth ...
EdSF

ใช่ดูเหมือนว่าคุณจะถูกต้องกับการประเมินของคุณ หลังจากดูตัวอย่างเพิ่มเติมฉันพบว่ามันเป็นเพียงการตรวจสอบข้อผิดพลาด JS ไม่ใช่ TS เมื่อใช้@ts-checkแอตทริบิวต์ ทำให้เข้าใจผิดมาก ...
เจมส์

-1

สำหรับใครก็ตามที่มาที่นี่และวิธีแก้ปัญหาอื่น ๆ ไม่ได้ผลให้ลองทำดู ฉันใช้ typescript + react และปัญหาของฉันคือฉันกำลังเชื่อมโยงไฟล์ใน vscode เพราะjavascriptreactไม่ได้typescriptreactตรวจสอบการตั้งค่าของคุณสำหรับรายการต่อไปนี้

   "files.associations": {
    "*.tsx": "typescriptreact",
    "*.ts": "typescriptreact"
  },
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.