Kafa karıştırıcı “yinelenen tanımlayıcı” dizesi hata mesajı


224

Neden böyle ve daha birçok hata alıyorum? Aşağıdaki anahtar kod parçacıklarının yanı sıra repo için bir bağlantı ekliyorum. Bağımlılığın ve “dahil et” zincirinin nasıl işlediğine dair temel bir yanlış anlama olduğunu düşünüyorum.

csvproc(master)> tsc
node_modules/typescript/bin/lib.core.d.ts(83,5): error TS2300: Duplicate identifier 'configurable'.
node_modules/typescript/bin/lib.core.d.ts(84,5): error TS2300: Duplicate identifier 'enumerable'.
node_modules/typescript/bin/lib.core.d.ts(85,5): error TS2300: Duplicate identifier 'value'.
node_modules/typescript/bin/lib.core.d.ts(86,5): error TS2300: Duplicate identifier 'writable'.

Tüm kodu burada bulabilirsiniz .

Tsconfig.json'um:

{
    "compilerOptions": {
        "module": "commonjs",
        "noImplicitAny": false,
        "outDir": "built/",
        "sourceMap": true,
        "target": "es5"
    }
}

Benim tsd.json:

{
  "version": "v4",
  "repo": "borisyankov/DefinitelyTyped",
  "ref": "master",
  "path": "typings",
  "bundle": "typings/tsd.d.ts",
  "installed": {
    "node/node-0.10.d.ts": {
      "commit": "6387999eb899d0ba02d37dd8697647718caca230"
    },
    "should/should.d.ts": {
      "commit": "e1182d56ccb192379eade6055d9ba3fb6a0bacc4"
    }
  }
}

Benim tsd.d.ts:

{
  "version": "v4",
  "repo": "borisyankov/DefinitelyTyped",
  "ref": "master",
  "path": "typings",
  "bundle": "typings/tsd.d.ts",
  "installed": {
    "node/node-0.10.d.ts": {
      "commit": "6387999eb899d0ba02d37dd8697647718caca230"
    },
    "should/should.d.ts": {
      "commit": "e1182d56ccb192379eade6055d9ba3fb6a0bacc4"
    }
  }
}

Sizin tsd.d.tsmuhtemelen bir başvuru etiketleri çift ve bir JSON dosyası gibi görünüyor.
yangmillstheory

1
Neden bir typings.jsonAND a'ya ihtiyacınız var tsd.d.ts?
CodyBugstein

Çözümü buraya koydum, görebiliyorsunuz. stackoverflow.com/questions/40404353/…
hüseyint

Yanıtlar:


126

Bunun nedeni iki şeyin birleşimidir:

  • tsconfigherhangi bir filesbölümü yok. Gönderen http://www.typescriptlang.org/docs/handbook/tsconfig-json.html

    Tsconfig.json dosyasında "files" özelliği yoksa, derleyici varsayılan olarak içeren dizindeki ve alt dizinlerdeki tüm dosyaları dahil eder. Bir "files" özelliği belirtildiğinde, yalnızca bu dosyalar dahil edilir.

  • typescriptBir npm bağımlılığı olarak dahil etmek : node_modules/typescript/Bu, tüm içeriğin dahil edildiği anlamına gelir typescript.... lib.d.tsprojenize zaten dolaylı olarak dahil edilmiştir ( http://basarat.gitbook.io/typescript/content/docs/types/lib.d.ts .html ) ve onun yazı tipinin NPM sürümüyle birlikte gelenle çakışıyor.

Fix

Ya listeler filesya da includeaçıkça https://basarat.gitbook.io/typescript/docs/project/files.html 🌹


7
Veya bunun yerine daktiloyu global olarak mı yükleyebilirsiniz?
Ryan Cavanaugh

2
Evet neden orada olduğunu bilmiyorum :) Belki de (
aptal

RyanCavanaugh evet, sorun buydu; ve @basarat, henüz sofistike değilim, bu yüzden hem yerel hem de küresel olarak sahip olduğum bir gözetim oldu. Ya da savunmamda, geldiğim yakut dünyada bunu yapmak bir şeylere zarar vermiyor, bu yüzden bağlamım :) Hala yanıtınıza eklediğiniz bilgiler benim için resmi tamamlamaya devam ediyor. Çok teşekkürler. ikinizde!
pitosalas

5
Kullanım excludeözelliğini kullanma
Basarat

6
Github bağlantısı kopuk
Denny

70

Güncelleme : Tipler 1.0 Versiyonu çıktı yapısını değiştirdi ve aşağıdaki cevap 1.0 öncesi versiyon ile ilgilidir.

Typings kullanıyorsanız ve tsconfig.json dosyasında hariç tutuyorsanız, yinelenen türlerle karşılaşabilir ve aşağıdakine benzer bir şeye ihtiyacınız olabilir:

{
  "exclude": [
    "typings/browser.d.ts",
    "typings/browser",
    "node_modules"
  ]
}

TypeScript ile entegrasyonu basitleştirmek için, projede yüklü olan ve aynı anda yalnızca bir tanesi kullanılabilen tüm tiplendirmelere referans veren iki dosya - typings / main.d.ts ve typings / browser.d.ts - üretilir.

Bu nedenle, hangi sürüme ihtiyacınız olduğuna bağlı olarak, kopyaların geldiği yer olduğu için "tarayıcı" veya "ana" tür dosyalarını hariç tutmanız (veya eklemeniz) gerekir.

Bu Tipler sorunu daha fazla tartışıyor.


Harika bir adam, bu projenize Tipler dahil yinelenen tanımlayıcı hatası ile sorunu çözer :)
magicode118

neden sadece "yazımları" hariç tutmuyorsunuz? Yazmalar sadece geliştirme zamanı içindir, çalışma zamanı için değil mi?
Eric Hartford

Bu, derleme zamanında türlerin nerede bulunacağını tanımlar. "Tipleri" hariç tutarsanız artık hiçbir tür bulamazsınız. Burada sorun derlemeye çalışıyor ve yinelenen türleri var. TypeScript bir çalışma zamanı değildir, kodunuzu JavaScript'e aktarır.
RationalDev GoFundMonica'yı seviyor

2
VS2017'de "bin", "obj" i .NETCore2 MVC uygulamasında hariç tutmak zorunda kaldım
OSP

Bu konuda OSP ile aynı sorunu yaşadım. Obj klasöründe TypeScript dosyaları vardı, bu yüzden kopya olarak gösteriliyorlardı. Her seferinde ilk inşa ettiğimde problemlere neden oldu ve daha sonra inşa tipini değiştirdiğimde her inşa ettiğimde problemlere neden olmaya devam etti.
Grungondola

24

Yazımları yazımlar klasörü altına ayrıca yüklediyseniz

{
  "exclude": [
    "node_modules",
    "typings"
  ]
}

2
ah evet - hariç tutmama yazım eklemek hatamı düzeltti.
cport1

1
Ben de "Objektif Sanal Projeler" gelen hatalara neden, / obj altında bir kopyası vardı. Bunları hariç tutmak için "obj" eklenmesi düzeltildi.
Jon

Bu tamamen benim yazı kırılır sunt eksik olduğunu sind.
Spenhouet

21

Sorun basitçe şu şekilde çözüldü:

  1. Siliniyor node_modulesKlasörü
  2. Koşu npm installdoğru sürümleri ile tüm paketleri almak için

Benim durumumda, yeni bir dalın farklı bir düğüm modülü seti kullandığı Git dallarını değiştirdikten sonra sorun oluştu. Eski dal, yeni sürüm v2.0 olan TypeScript v1.8 kullanıyordu


1
Yay bu benim için çalıştı. İlk başta node_modules'ü silemedim çünkü silmek için Yönetici erişimine ihtiyacı var diyor. Kullanıcı hesabımın yönetici erişimi var; asıl sorun, klasörü kullanan programları kapatmak için gerekli oldu.
Drew

15

Ben sadece bu problemle karşılaştım. Koştuğumda npm start, bir sürü yinelenen tanımlayıcı hatası aldım.

ÇÖZÜM:

Proje kök klasöründen çalıştırın:

rm -r typings
typings install
npm start

ve her şey yolunda gidiyor.


Benim için kullanıyorum geçiş oldu es6-shimkullanmanın core-jsbenim polyfills için ve bu işe yarardı çözümdür. Daha az ağırlıklı bir yaklaşım kullanmaktır typings prune.
StriplingWarrior

Benim için çalışıyor. Ama sanırım 'yazı yükleme' yerine 'npm yükleme'
olmalı

typings
Klasörüm

12

Tsconfig.json dosyasındaki exclude seçeneğini aşağıdaki gibi de kullanabilirsiniz:

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "declaration": false,
    "noImplicitAny": false,
    "removeComments": true,
    "noLib": false,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true
  },
  "exclude": [
    "node_modules"
  ]
}

4
Aynı sorunu yaşıyorum. Bu düzeltme benim için işe yaramıyor. Typcrip 1.75 kullanıyorum. Typescript Github deposunda bir sorun yayınladım .
Bart

1
TSD değil, yazım kullanıyorsanız @RationalDev tarafından önerilen çözümü kullanmalısınız
thitemple

4

Benim durumumda hatayı aldım

node_modules/@types/es6-promise/index.d.ts (11,15): hata TS2300: Yinelenen tanımlayıcı 'Promise'.

Ve @types/es6-promisebenim package.json üzerinde vardı ama benim tsconfigzaten vardı target: "es6". Bu yüzden Promisederlerken bir çatışma vardı sanırım .

Çıkarma @types/es6-promisebenim gelen package.jsondosyanın sorunu çözüldü.


3

Web paketini kullanarak aynı hatayla karşılaştım, sadece tsconfig.json'unuzdaki.d.ts dosyayı hariç tutmam ve node_modules sorunumu çözdü:

"exclude": [
    "node_modules",
    "typings/main",
    "typings/main.d.ts",
    "typings/index.d.ts"
] 

Ben de webpack ile bu hatayı vardı, sadece sunucu yeniden başlatıldığında düzeltildi.
Clint

1

Diskte beklenmeyen bir klasör olması nedeniyle bu sorun vardı (jspm_packages (ve benim IDE gizli) tarafından izlenmedi , artık kullanılmıyor) . Bu, sorunlara neden olan yinelenen bir TypeScript yüklemesine sahipti.

Biraz uç bir dava ama başka birinin bu çözüm için avlanması durumunda burada bir cevap bırakmak.


Bana benzer. Visual Studio Code'da artık IDE'de görünmeyen ancak yinelenen tanımlayıcı hatasını gösteren görünmez (öksüz) bir .js dosyasına neden olan bir patlama dosyasını yeniden adlandırdım.
DAG

0

Bu sorun vardı ve ben orada olması gerekiyordu benim projede bir ikinci node_modules klasör vardı çıkıyor :-(


Klasörlerinde node_modules içeren bazı kütüphaneler var. i 4.6.0 düğümü kullanırken hiçbir zaman herhangi bir sorun yaratmadı, ancak 6.9.0 düğümü ile aniden bu hatayı atıyor.
heman123

Bu sorunun hangi sürümle başladığını merak ediyorum. 5.6.0 düğümü ile ilgili sorun yaşadım.
Bruno

0

Ben tsconfig.json hedef: "es2015" ve modül: "es2015" değiştirdikten sonra diğerleri ile birlikte, bu hatayı vardı.

/// <reference path="../../typings/index.d.ts" />Main.ts dosyasında kullanılan temel (AngularJS2 hızlı başlatma). Bunu çözmek için o hattı kaldırmam gerekiyordu.


0

bir lib klasörünü web sitesi klasöründen kaldırdık. bu, önceki bir yazım yüklemesiyle oluşturuldu. bu kopya oldu. Bu kaldırıldığında işe yaradı!


0

Bunun nedeni düğüm klasörünüzde hem yazmanın hem de bağımlılığın olması olabilir. ilk olarak @types klasörünüzde ne olduğunu kontrol edin ve bağımlılıklarınız varsa kopyayı kaldırın. benim için core.js


0

bu @ types / express-validator paketini package.json dosyasından kaldırın, ardından npm install komutunu çalıştırın

Daha fazla oku

Yazar mesajı: Bu paket kullanımdan kaldırıldı Bu, ekspres doğrulayıcı için bir saplama türleri tanımıdır ( https://github.com/ctavan/express-validator ). express-validator kendi tip tanımlarını sağlar, bu yüzden @ types / express-validator kurulmasına gerek yoktur!



-2

Benzer bir sorunla karşılaştım. Sadece tsconfig.json'umu projemin kökünden farklı bir kapsama taşımak yardımcı oldu. Projemde tsconfig.json dosyasını kökten wwwroot'a taşıdım.


-2

Çözümü tamamen kapatmak ve projeyi yeniden çalıştırmak sorunumu çözdü.


Neden reddedildiđini bilmiyorum. Cevabınızı okuduktan sonra IntelliJ'de "Önbellekleri Geçersiz Kıl ve Yeniden Başlat" ı tıkladım ve sorun çözüldü, teşekkürler!
Johannes Stadler
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.