Kendi Javascript servislerim için VS Code'da Intellisense almak için Typescript tanımlarını nasıl kullanabilirim?


SailsJS kullanarak bir backend sunucusu geliştiriyorum. Temelde tüm model yardımcı servislerini ve kendi servislerimi global isim alanına enjekte ediyor. Bu servisler için Intellisense alabilmem benim için büyük fayda sağlar.

Önce typings kurdum ve lodash ile node için global tip tanımlarını yükledim. jsconfig.json ve tsconfig.json dosyalarını oluşturduktan sonra mükemmel çalışıyor.

Sonra kendi servislerim için temel bir tanımlar dosyası oluşturmak istedim. typings/globals içinde bir dizin oluşturdum ve içinde bir index.d.ts dosyası vardı:

declare namespace foo {
    export function bar();
}
declare var baz: { some: number };

Bu, işe yaramayacaklarsa tanımlar yazmakla zaman kaybetmediğimden emin olmak içindir.

Sonra bir referans etiketi ekleyerek o index.d.ts dosyasını typings/index.d.ts içine dahil ettim:

/// <reference path="globals/psiewakacje/index.d.ts" />

Şaşırtıcı bir şekilde, projemin Javascript dosyalarında çalışmıyor. foo. veya baz. yazdığımda anlamlı bir Intellisense alamıyorum.

Alabildiğim tek Intellisense desteği, bu servisleri her dosyada şu şekilde içe aktardığımda elde ettiğim destekti:

import * as InternalParser from '../services/InternalParser';

veya

var InternalParser = require('../services/InternalParser');

ama bu, Typescript'in tanım dosyalarını kullanmıyor ve sadece bana dışa aktarılan özellikleri veriyor. Genel olarak istenmeyen bir sonuç.

Onu düzgün çalıştırmanın yolunu merak ediyorum. Node'un ve Lodash'ın tür tanım dosyalarına baktım ve ikisi de aynı şeyi yapıyor: belirli bir tipe sahip bir değişken/isim alanı bildiriyorlar. Ancak onların tanımlamaları Javacript'te çalışıyor, benimkiler çalışmıyor. Bunu doğru yapmak için ne yapmalı?

Cevap #1

Eğer "allowJs": "true" derleyici seçeneği olmadan bir tsconfig.json dosyası oluşturursam, tanımlanan davranışı tekrarlayabilirim. TypeScript ve JavaScript dosyalarınızın tek bir proje olarak değerlendirilmesini istiyorsanız, "allowJs": "true" içeren bir tsconfig.json dosyanız olmalı ve jsconfig.json dosyası bulunmamalıdır.

Cevap #2

typings/index.d.ts dosyasına bir referans eklemeniz gerekmez. En kolay yol, beyanlarınızı projenizin herhangi bir yerindeki global bir beyan dosyasına eklemektir.

Dahası, var ve namespace kullanmak yerine, sadece interface kullanın.

Örn. dizininizin kökünde, kolayca ekleyebilirsiniz

// index.d.ts
interface Foo {
  bar: () => void
}

interface Baz { some: number }

İlgili makaleler