js 'type' chỉ có thể được sử dụng trong tệp .ts - Visual Studio Code sử dụng @ ts-check


104

Tôi đang bắt đầu sử dụng TypeScript trong một dự án Node mà tôi đang làm việc trong Visual Studio Code. Tôi muốn thực hiện theo chiến lược "chọn tham gia", tương tự như Flow. Do đó, tôi đặt // @ts-checkở đầu .jstệp của mình với hy vọng có thể kích hoạt TS cho tệp đó. Cuối cùng, tôi muốn có trải nghiệm "linting" giống như Flow, do đó tôi đã cài đặt plugin TSLint để có thể thấy các cảnh báo / lỗi Intellisense.

Nhưng với tệp của tôi trông giống như:

// @ts-check

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

tsconfig.jsontệp của tôi trông giống như ...

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

Tôi gặp lỗi này: [js] 'types' can only be used in a .ts file.như được hiển thị bên dưới trong hình ảnh.

lỗi từ vscode cho ts

Tôi đã thấy câu hỏi này đề xuất tắt xác thực javascript trong vscode nhưng sau đó điều đó không hiển thị cho tôi bất kỳ thông tin TypeScript Intellisense nào.

Tôi đã thử đặt tslint.jsEnablethành truetrong cài đặt vscode của mình như đã đề cập trong tài liệu mở rộng TSLint nhưng không may mắn ở đó.

Cách thiết lập chính xác để sử dụng .jstệp với TypeScript và tải Intellisense là gì để tôi biết lỗi trong mã của mình là gì trước khi chạy bất kỳ lệnh TS nào?


Bạn có gặp lỗi gì không nếu bạn thay đổi phần mở rộng thành ts?
Israel Zinc

@ israel.zinc thay đổi phần mở rộng để .tshiển thị cho tôi các lỗi / cảnh báo TS như mong đợi. Tôi đoán điều này có thể hoạt động, nhưng tôi hy vọng có nhiều phương pháp chọn tham gia hơn bằng cách sử dụng @ts-checktrong khi vẫn giữ tất cả các tiện ích mở rộng của mình là.js
james


@ BuZZ-dEE có thể là như vậy, nhưng các câu trả lời ở đó không giải quyết được vấn đề. Tôi đã đề cập đến điều này trong câu hỏi ban đầu của tôi.
james

Câu trả lời:


203

Tôi đang sử dụng @flow với vscode nhưng gặp sự cố tương tự.

Tôi đã giải quyết nó bằng các bước sau:

  1. cài đặt tiện ích mở rộng Hỗ trợ ngôn ngữ luồng
  2. tắt tiện ích mở rộng TypeScript được tích hợp sẵn:

Cách tắt TypeScript cài sẵn:

  1. chuyển đến tab tiện ích mở rộng
  2. tìm kiếm @builtin Tính năng TypeScript và Ngôn ngữ JavaScript
  3. bấm vào Disable

5
Câu trả lời được chấp nhận không phải lúc nào cũng đúng. Có một lỗi trong VSCode với React Native và Flow đưa ra cùng một thông báo trong các tệp .js và trong trường hợp đó BẠN KHÔNG NÊN thay đổi thành .ts, nhưng hãy tiếp tục với .js và khắc phục sự cố như được đề xuất ở đây !!
pashute

105
Chỉ là FYI: Việc vô hiệu hóa tiện ích này về cơ bản sẽ vô hiệu hóa tất cả những điều tốt đẹp về phát triển JS với VSCode. Thay vào đó, bạn chỉ nên thêm những thứ sau vào tệp json cài đặt của mình: "javascript.validate.enable": false
heez

1
như @heez đã đề cập, điều này sẽ ảnh hưởng, việc tìm kiếm tham chiếu đến các tệp javascript, tự động hoàn thành, v.v. đừng tắt Tính năng ngôn ngữ Javascript.
Ajitsen

2
Câu trả lời hợp lệ đã được nói bởi @heez
Asim Olmez

1
@heez cảm ơn vì đã lưu, tôi phát hiện ra. Không có lỗi bây giờ. Cuối cùng có thể sử dụng mã Visual studio.
Anish Arya

93

Sử dụng "javascript.validate.enable": falsetrong cài đặt Mã VS của bạn, Nó không tắt ESLINT. Tôi sử dụng cả ESLINT & Flow. Chỉ cần làm theo hướng dẫn Quy trình thiết lập mã Vs

Thêm dòng này trong settings.json. Giúp đỡ "javascript.validate.enable": false


4
Với điều này, bạn không phải vô hiệu hóa bảng chữ. Cả hai đều có thể tồn tại. Giải pháp tốt nhất!
Nirus

2
Nếu bạn đang sử dụng ESLint để xác thực Javascript của mình, thì câu trả lời này là giải pháp tốt nhất. Thông tin thêm: code.visualstudio.com/docs/languages/… và cả github.com/flowtype/flow-for-vscode#setup
Beau Smith

1
Tôi có thể tìm tệp settings.json ở đâu.?
i18n

1
Xin chào @ i18n Đi tới: Mã -> Tùy chọn -> Cài đặt -> Tiện ích mở rộng -> Cuộn xuống và tìm "Chỉnh sửa trong cài đặt.json". Trên thực tế tìm ra ai dưới này: 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"}bấm vào Edit in settings.json và thêm này: "javascript.validate.enable": false.
Fotis Tsakiris

tốt nhất .. làm việc tốt cho tôi
Betini O. Heleno

1

Bạn phải sử dụng một .tstệp - ví dụ: test.tsđể có được xác thực Typecript , intellisensetyping của vars, kiểu trả về, cũng như kiểm tra lỗi "đã nhập" (ví dụ: chuyển stringmột phương thức đến một phương thức mà dự kiến ​​một numbertham số sẽ bị lỗi).

Nó sẽ được chuyển thành (tiêu chuẩn) .js quatsc .


Cập nhật (11/2018):

Cần làm rõ dựa trên lượt bình chọn thấp, nhận xét rất hữu ích và các câu trả lời khác.

types

  • Có, bạn có thể typekiểm tra Mã VS trong .jscác tệp với @ts-check- như được hiển thị trong hình ảnh động

  • Những gì ban đầu tôi đề cập đến cho Typecript types là một cái gì đó như thế này, trong .tsđó không hoàn toàn giống như vậy:

    hello-world.ts

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

    Điều này sẽ không biên dịch. Error: Type "1" is not assignable to String

  • nếu bạn đã thử cú pháp này trong tệp Javascript hello-world.js :

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

    Thông báo lỗi do OP tham chiếu được hiển thị: [js] 'types' can only be used in a .ts file

Nếu có điều gì đó tôi đã bỏ lỡ bao gồm điều này cũng như bối cảnh của OP, vui lòng bổ sung. Tất cả chúng ta cùng tìm hiểu.


Tôi đã tìm thấy một vài bài báo gợi ý rằng bạn có thể sử dụng tất cả các tính năng của TS trong một tệp JS. Đây là một từ Tạp chí Smashing , một số phát hành trên GitHub cho vscode mô tả thiết lập và một số ghi chú phát hành cho vscode
james

@ jamez14 Mình chưa thử / có nhu cầu không dùng .ts. IINM, các mẫu hiển thị kiểm tra lỗiintellisense . Vấn đề bạn có là (tĩnh) typeing biến của bạn, và trở lại typeslà tốt - ví dụ như foo:string, bar:number, fubar:MyClass, myMethod(f:Array):void, anotherMethod():string. Hth ...
EdSF

vâng, có vẻ như bạn đã đúng với đánh giá của mình. Sau khi xem thêm các ví dụ, tôi thấy đó chỉ là kiểm tra lỗi JS, không phải TS, khi sử dụng @ts-checkthuộc tính. Rất sai lầm ...
james

-1

Đối với bất kỳ ai đặt chân đến đây và tất cả các giải pháp khác không hoạt động, hãy thử điều này. Tôi đang sử dụng nguyên cảo + phản ứng và vấn đề của tôi là tôi đã liên kết các tập tin trong vscode như javascriptreactkhông typescriptreactđể kiểm tra các thiết lập của bạn cho các mục sau đây.

   "files.associations": {
    "*.tsx": "typescriptreact",
    "*.ts": "typescriptreact"
  },
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.