js 'türleri' yalnızca bir .ts dosyasında kullanılabilir - @ ts-check kullanılarak Visual Studio Code


107

Visual Studio Code üzerinde çalıştığım bir Node projesinde TypeScript kullanmaya başlıyorum. Flow'a benzer şekilde "dahil olma" stratejisini izlemek istedim. Bu nedenle // @ts-check, o .jsdosya için TS'yi etkinleştirmek umuduyla dosyamın en üstüne koydum . Nihayetinde Flow ile aynı "linting" deneyimini istiyorum, bu nedenle Intellisense uyarılarını / hatalarını görebilmek için TSLint eklentisini yükledim .

Ama dosyam şöyle görünüyor:

// @ts-check

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

ve dosyam tsconfig.jsonşuna benziyor ...

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

Bu hatayı alıyorum: [js] 'types' can only be used in a .ts file.aşağıdaki resimde gösterildiği gibi.

ts için vscode'dan hata

Vscode'da javascript doğrulamasını devre dışı bırakmayı öneren bu soruyu gördüm , ancak bu bana herhangi bir TypeScript Intellisense bilgisi göstermiyor.

Ben ayarlama çalıştı tslint.jsEnableiçin truehiçbir şans yok TSLint uzatma docs geçiyor, ancak benim vscode ayarlarında.

.jsDosyaları TypeScript ile kullanmak ve Intellisense almak için doğru kurulum nedir, böylece herhangi bir TS komutunu çalıştırmadan önce kodumdaki hataların ne olduğunu bilirim?


Uzantıyı ts olarak değiştirirseniz herhangi bir hata olur mu?
Israel Zinc

@ israel.zinc .ts, beklendiği gibi TS hatalarını / uyarılarını göstermek için uzantıyı değiştiriyor . Sanırım bu işe yarayabilir, ancak @ts-checktüm uzantılarımı olduğu gibi tutarken daha fazla tercih yöntemini kullanmayı umuyordum.js
james


@ BuZZ-dEE olabilir, ancak oradaki cevaplar sorunu çözmedi. Orijinal sorumda bundan bahsetmiştim.
james

Yanıtlar:


205

Ben kullanıyorum @flow vscode ile değil aynı problem vardı.

Bunu şu adımlarla çözdüm:

  1. Flow Language Support uzantısını yükleyin
  2. yerleşik TypeScript uzantısını devre dışı bırakın:

Yerleşik TypeScript nasıl devre dışı bırakılır:

  1. gidin uzantıları sekmesi
  2. @builtin TypeScript ve JavaScript Dil Özelliklerini arayın
  3. Devre Dışı Bırak'a tıklayın

5
Kabul edilen cevap her zaman doğru değildir. VSCode'da React Native ve Flow'da .js dosyalarında aynı mesajı veren bir hata var ve bu durumda .ts olarak değiştirmemelisiniz, ancak .js ile devam edip sorunu burada önerildiği gibi düzeltmelisiniz !!
18:24 pashute

107
Bilginize: Bu uzantıyı devre dışı bırakmak, VSCode ile JS geliştirmeyle ilgili tüm güzel şeyleri temelde geçersiz kılar. Bunun yerine, aşağıdakileri ayarlar json dosyanıza "javascript.validate.enable": false
eklemelisiniz

1
@heez bunun etkileyeceğini belirttiğinden, javascript dosyalarına referans bulmak, otomatik tamamlama vb. Javascript Dil Özelliklerini devre dışı bırakmaz.
Ajitsen

2
Geçerli cevap @heez tarafından söyleniyordu
Asım Ölmez

1
@heez kurtardığın için teşekkürler, öğrendim. Şimdi hata yok. Sonunda Visual Studio kodunu kullanabilir.
Anish Arya

94

"javascript.validate.enable": falseVS Code ayarlarınızda kullanın , ESLINT'i devre dışı bırakmaz. Hem ESLINT hem de Flow kullanıyorum. Sadece Vs Kodu Kurulumu İçin Akış talimatlarını izleyin

Bu satırı settings.json içine ekleyerek. Yardım eder "javascript.validate.enable": false


4
Bununla, typcript'i devre dışı bırakmanız gerekmez. Her ikisi de olabilir. En iyi çözüm!
Nirus

2
Javascript'inizi doğrulamak için ESLint kullanıyorsanız, bu cevap en iyi çözümdür. Daha fazla bilgi: code.visualstudio.com/docs/languages/… ve ayrıca github.com/flowtype/flow-for-vscode#setup
Beau Smith

1
Settings.json dosyasını nerede bulabilirim?
i18n

1
Merhaba @ i18n Şuraya gidin: Kod -> Tercihler -> Ayarlar -> Uzantılar -> Aşağı kaydırın ve "settings.json'da düzenle" öğesini bulun. Aslında bu altında bulmak: 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 Edit in tıklayın ve bunun ekleyin: "javascript.validate.enable": false.
Fotis Tsakiris

benim için iyi çalışıyor
Betini O. Heleno

0

Bir .tsdosya kullanmalısınız - örneğin test.ts, Typescript doğrulaması, typing değişkenler için akıllı algılar, dönüş türleri ve ayrıca "yazılan" hata denetimi (örneğin string, bir numberparametrenin hata vereceğini bekleyen bir yönteme a iletmek ).

Yoluyla (standart) içine .js aktarılacaktırtsc .


Güncelleme (11/2018):

Olumsuz oylara, çok faydalı yorumlara ve diğer yanıtlara dayalı olarak açıklama gerekiyor.

types

  • Evet, animasyonda gösterildiği gibi dosyalarda typeVS Kodunu kontrol edebilirsiniz..js@ts-check

  • Aslen Typescript için bahsettiğim typesşey .ts, tamamen aynı olmayan , bunun gibi bir şey:

    hello-world.ts

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

    Bu derlenmeyecek. Error: Type "1" is not assignable to String

  • bu sözdizimini bir Javascript hello-world.js dosyasında denediyseniz :

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

    OP tarafından atıfta bulunulan hata mesajı gösterilir: [js] 'types' can only be used in a .ts file

Bunu ve OP'nin bağlamını kapsayan kaçırdığım bir şey varsa, lütfen ekleyin. Hepimiz öğrenelim.


Bir JS dosyasında TS'nin tüm özelliklerini kullanabileceğinizi öneren birkaç makale buldum. İşte Smashing Magazine'den , vscode için kurulumu açıklayan bir GitHub sayısı ve vscode için bazı sürüm notları
james

@ jamez14 Ben denemedim / gereğini vardı değil kullanın .ts. IINM, örnekler göstermek hata denetimi ve intellisense . Sahip olduğunuz konu (statik) 'dir typesenin değişkenleri ing ve dönüş typesde - örneğin foo:string, bar:number, fubar:MyClass, myMethod(f:Array):void, anotherMethod():string. Hth ...
EdSF

evet, değerlendirmenizde haklısınız gibi görünüyor. Örneklere daha fazla baktıktan sonra, @ts-checközniteliği kullanırken bunun TS değil, JS hatası kontrolü olduğunu görüyorum . Çok yanıltıcı ...
james

-1

Buraya inen ve diğer tüm çözümler işe yaramayan herkes için bunu deneyin. Typecript + react kullanıyorum ve benim sorunum, dosyaları vscode ile ilişkilendiriyor olmamdı, javascriptreactbu typescriptreactyüzden aşağıdaki girişler için ayarlarınızı kontrol edin.

   "files.associations": {
    "*.tsx": "typescriptreact",
    "*.ts": "typescriptreact"
  },
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.