Angular: Không thể tìm thấy Promise, Map, Set và Iterator


176

Sau khi cài đặt góc, các nguyên cảo biên dịch tiếp tục nhận được một số lỗi về việc không tìm Promise, Map, SetIterator.

Cho đến bây giờ tôi bỏ qua chúng nhưng bây giờ tôi cần Promiseđể mã của tôi có thể hoạt động.

import {Component} from 'angular2/core';
@Component({
    selector: 'greeting-cmp',
    template: `<div>{{ asyncGreeting | async}}</div>`
})
export class GreetingCmp {
    asyncGreeting: Promise<string> = new Promise(resolve => {
// after 1 second, the promise will resolve
        window.setTimeout(() => resolve('hello'), 1000);
    });
}

Additional information:
npm -v is 2.14.12
node -v is v4.3.1
typescript v is 1.6

Những lỗi:

................ERROS OF MY CODE.................
    C:\Users\armyTik\Desktop\angular2\greeting_cmp.ts
    Error:(7, 20) TS2304: Cannot find name 'Promise'.
    Error:(7, 42) TS2304: Cannot find name 'Promise'.
    .........................................
    C:\Users\armyTik\Desktop\angular2\node_modules\angular2\platform\browser.d.ts
    Error:(77, 90) TS2304: Cannot find name 'Promise'.
    C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\core\application_ref.d.ts
    Error:(83, 60) TS2304: Cannot find name 'Promise'.
    Error:(83, 146) TS2304: Cannot find name 'Promise'.
    Error:(96, 51) TS2304: Cannot find name 'Promise'.
    Error:(96, 147) TS2304: Cannot find name 'Promise'.
    Error:(133, 90) TS2304: Cannot find name 'Promise'.
    Error:(171, 81) TS2304: Cannot find name 'Promise'.
    C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\core\change_detection\parser\locals.d.ts
    Error:(3, 14) TS2304: Cannot find name 'Map'.
    Error:(4, 42) TS2304: Cannot find name 'Map'.
    C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\core\debug\debug_node.d.ts
    Error:(14, 13) TS2304: Cannot find name 'Map'.
    Error:(24, 17) TS2304: Cannot find name 'Map'.
    Error:(25, 17) TS2304: Cannot find name 'Map'.
    C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\core\di\provider.d.ts
    Error:(436, 103) TS2304: Cannot find name 'Map'.
    Error:(436, 135) TS2304: Cannot find name 'Map'.
    C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\core\linker\compiler.d.ts
    Error:(12, 50) TS2304: Cannot find name 'Promise'.
    Error:(16, 41) TS2304: Cannot find name 'Promise'.
    C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\core\linker\dynamic_component_loader.d.ts
    Error:(108, 136) TS2304: Cannot find name 'Promise'.
    Error:(156, 150) TS2304: Cannot find name 'Promise'.
    Error:(197, 128) TS2304: Cannot find name 'Promise'.
    Error:(203, 127) TS2304: Cannot find name 'Promise'.
    Error:(204, 141) TS2304: Cannot find name 'Promise'.
    Error:(205, 119) TS2304: Cannot find name 'Promise'.
    C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\core\render\api.d.ts
    Error:(13, 13) TS2304: Cannot find name 'Map'.
    Error:(14, 84) TS2304: Cannot find name 'Map'.
    C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\facade\async.d.ts
    Error:(27, 33) TS2304: Cannot find name 'Promise'.
    Error:(28, 45) TS2304: Cannot find name 'Promise'.
    C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\facade\collection.d.ts
    Error:(1, 25) TS2304: Cannot find name 'MapConstructor'.
    Error:(2, 25) TS2304: Cannot find name 'SetConstructor'.
    Error:(4, 27) TS2304: Cannot find name 'Map'.
    Error:(4, 39) TS2304: Cannot find name 'Map'.
    Error:(7, 9) TS2304: Cannot find name 'Map'.
    Error:(8, 30) TS2304: Cannot find name 'Map'.
    Error:(11, 43) TS2304: Cannot find name 'Map'.
    Error:(12, 27) TS2304: Cannot find name 'Map'.
    Error:(14, 23) TS2304: Cannot find name 'Map'.
    Error:(15, 25) TS2304: Cannot find name 'Map'.
    Error:(95, 41) TS2304: Cannot find name 'Set'.
    Error:(96, 22) TS2304: Cannot find name 'Set'.
    Error:(97, 25) TS2304: Cannot find name 'Set'.
    C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\facade\lang.d.ts
    Error:(13, 17) TS2304: Cannot find name 'Map'.
    Error:(14, 17) TS2304: Cannot find name 'Set'.
    Error:(78, 59) TS2304: Cannot find name 'Map'.
    C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\facade\promise.d.ts
    Error:(2, 14) TS2304: Cannot find name 'Promise'.
    Error:(7, 32) TS2304: Cannot find name 'Promise'.
    Error:(8, 38) TS2304: Cannot find name 'Promise'.
    Error:(9, 35) TS2304: Cannot find name 'Promise'.
    Error:(9, 93) TS2304: Cannot find name 'Promise'.
    Error:(10, 34) TS2304: Cannot find name 'Promise'.
    Error:(11, 32) TS2304: Cannot find name 'Promise'.
    Error:(11, 149) TS2304: Cannot find name 'Promise'.
    Error:(12, 43) TS2304: Cannot find name 'Promise'.
    C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\http\headers.d.ts
    Error:(43, 59) TS2304: Cannot find name 'Map'.
    C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\http\url_search_params.d.ts
    Error:(11, 16) TS2304: Cannot find name 'Map'.
    C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\platform\browser\browser_adapter.d.ts
    Error:(75, 33) TS2304: Cannot find name 'Map'.
    C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\platform\dom\dom_adapter.d.ts
    Error:(85, 42) TS2304: Cannot find name 'Map'.
    C:\Users\armyTik\Desktop\angular2\node_modules\rxjs\CoreOperators.d.ts
    Error:(35, 67) TS2304: Cannot find name 'Promise'.
    Error:(50, 66) TS2304: Cannot find name 'Promise'.
    Error:(89, 67) TS2304: Cannot find name 'Promise'.
    Error:(94, 38) TS2304: Cannot find name 'Promise'.
    Error:(94, 50) TS2304: Cannot find name 'Promise'.
    C:\Users\armyTik\Desktop\angular2\node_modules\rxjs\Observable.d.ts
    Error:(46, 62) TS2304: Cannot find name 'Promise'.
    Error:(47, 42) TS2304: Cannot find name 'Iterator'.
    Error:(103, 74) TS2304: Cannot find name 'Promise'.
    Error:(103, 84) TS2304: Cannot find name 'Promise'.
    Error:(143, 66) TS2304: Cannot find name 'Promise'.
    Error:(158, 65) TS2304: Cannot find name 'Promise'.
    Error:(201, 66) TS2304: Cannot find name 'Promise'.
    Error:(206, 38) TS2304: Cannot find name 'Promise'.
    Error:(206, 50) TS2304: Cannot find name 'Promise'.
    C:\Users\armyTik\Desktop\angular2\node_modules\rxjs\observable\ForkJoinObservable.d.ts
    Error:(6, 50) TS2304: Cannot find name 'Promise'.
    Error:(7, 58) TS2304: Cannot find name 'Promise'.
    C:\Users\armyTik\Desktop\angular2\node_modules\rxjs\observable\FromObservable.d.ts
    Error:(7, 38) TS2304: Cannot find name 'Promise'.
    Error:(7, 51) TS2304: Cannot find name 'Iterator'.
    C:\Users\armyTik\Desktop\angular2\node_modules\rxjs\observable\PromiseObservable.d.ts
    Error:(9, 31) TS2304: Cannot find name 'Promise'.
    Error:(10, 26) TS2304: Cannot find name 'Promise'.

1
Cài đặt phiên bản mới nhất của TypeScript cho Visual Studio 2015 .
mylesk

Câu trả lời:


177

Góc 5 với Bản in ^ 2.0.0

Điều này cũng sẽ hoạt động tương tự với các phiên bản trước của Angular 2+.

Để làm việc này với bản thảo 2.0.0, tôi đã làm như sau.

npm install --save-dev @types/core-js

tsconfig.json

 "compilerOptions": {
    "declaration": false,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "mapRoot": "./",
    "module": "es6",
    "moduleResolution": "node",
    "noEmitOnError": true,
    "noImplicitAny": false,
    "outDir": "../dist/out-tsc",
    "sourceMap": true,
    "target": "es5",
    "typeRoots": [
      "../node_modules/@types"
    ],
    "types": [
      "core-js"
    ]
  }

Tìm hiểu thêm về @types với bản thảo 2.0.0.

  1. https://bloss.msdn.microsoft.com/typescript/2016/06/15/the-future-of-declaration-files/
  2. https://www.npmjs.com/~types

Ví dụ cài đặt:

npm install --save-dev @types/core-js

Lỗi định danh trùng lặp

Điều này rất có thể bởi vì các kiểu đánh máy 6 bản sao đã được nhập từ một nơi khác rất có thể là một es6-shim cũ.

Kiểm tra lại typings.d.tsđảm bảo không có tài liệu tham khảo es6. Xóa mọi tham chiếu es6khỏi thư mục typings của bạn nếu bạn có.

Ví dụ:

Điều này sẽ xung đột với types:['core-js']trong typings.json.

{
  "globalDependencies": {
    "core-js": "registry:dt/core-js#0.0.0+20160602141332" 
    // es6-shim will also conflict
  }
}

Bao gồm core-jstrong các loại mảng tsconfig.jsonnên là nơi duy nhất được nhập từ đó.

Góc CLI 1.0.0-beta.30

Nếu bạn đang sử dụng Angular-CLI, hãy xóa mảng lib trong typings.json. Điều này dường như mâu thuẫn với việc khai báo core-js trong các loại.

"compilerOptions" : {
  ...
  // removed "lib": ["es6", dom"],
  ...
},
"types" : ["core-js"]

Người dùng Webstorm / Intellij sử dụng CLI góc

Hãy chắc chắn rằng trình biên dịch typcript tích hợp bị vô hiệu hóa. Điều này sẽ xung đột với CLI. Để biên dịch bản thảo của bạn với CLI, bạn có thể thiết lập ng servecấu hình.

nhập mô tả hình ảnh ở đây

Trình biên dịch TsconfigOptions lib vs các loại

Nếu bạn không muốn cài đặt các định nghĩa loại js lõi, có một số thư viện es6 đi kèm với bản in. Những người được sử dụng thông qua lib: []tài sản trong tsconfig.

Xem ở đây ví dụ: https://www.typescriptlang.org/docs/handbook/compiler-options.html

Lưu ý: Nếu --lib không được chỉ định, thư viện mặc định sẽ được thêm vào. Thư viện mặc định được chèn là: ► Đối với --target ES5: DOM, ES5, Scripthost ► Đối với --target ES6: DOM, ES6, DOM.Iterable, Scripthost

tl; dr

Câu trả lời ngắn "lib": [ "es6", "dom" ]hoặc "types": ["core-js"]có thể được sử dụng để giải quyết can't find Promise,Map, Set and Iterator. Tuy nhiên, sử dụng cả hai sẽ gây ra lỗi định danh trùng lặp.


1
Cảm ơn đã cập nhật và câu trả lời tốt. Tôi chấp nhận câu trả lời của bạn vì mọi người vẫn đến đây để nhận lỗi này cho đến bây giờ. Có bất kỳ cơ hội bạn cập nhật câu trả lời của bạn cho RC 5? Tôi đang đối mặt với lỗi này và bằng cách làm theo câu trả lời của bạn, tôi đã có thể sử dụng lời hứa nhưng hiện tại có rất nhiều lỗi từ tệp node_modules \ @types \ es6-shim \ index.d.ts: "Sao chép định danh 'PropertyKey'." trong các dòng: 6,10,248,283,290, v.v., cũng có lỗi trong: C: \ Users \ armyTik \ Desktop \ rc5 \ store-app-02 \ node_modules \ typecript \ lib \ lib.es2015.core.d.ts: 17 : 13 Mã định danh trùng lặp 'PropertyKey'.
Stav Alfi

Tôi cập nhật câu trả lời của tôi. Hy vọng rằng sẽ giúp mọi thứ rõ ràng một chút. Điều này nên giống nhau cho cả RC5 và RC4 tôi tin.
Kris Hollenbeck

Tôi cũng đã thay đổi nó để chỉ phản ánh core-js nên hy vọng sẽ ít gây nhầm lẫn hơn. core-js và es6 đều cho khai báo kiểu cụ thể es6. Tôi thích core-js vì nó dường như bao phủ nhiều hơn es6-shim.
Kris Hollenbeck

Cảm ơn các cập nhật. Tôi không có may mắn lần này. Tôi đã cập nhật các lỗi hiện tại của tôi.
Stav Alfi

2
Có lẽ, lib là giải pháp tốt hơn. github.com/angular/angular/blob/
Alex

75

Tôi cũng gặp vấn đề tương tự - "Không tìm thấy lời hứa" - khi mã muốn tạo một đối tượng Promise.

Đã thử một số giải pháp được tìm thấy trên stackoverflow, bao gồm một giải pháp để loại bỏ System.config ({...}) để tạo system.js và đưa nó vào index.html.

Cuối cùng tôi cũng giải quyết được vấn đề. Vấn đề là, trong index.html, es6-shim.min.js được bao gồm. Tuy nhiên, trong tsconfig.json, thuộc tính "đích" trong "trình biên dịch" có giá trị là "es5". Sau khi tôi đổi nó thành "es6", lỗi không còn nữa.


2
Đây là vấn đề đối với tôi là tốt. Có ai biết tại sao điều này sẽ gây ra lỗi đó?
Nick Brady

Đã sửa lỗi tôi cũng nhận được trong IntelliJ IDEA /
WebStorm

5
Nhưng mã js phải được dịch mã sang es5 vì không phải tất cả các trình duyệt đều sẵn sàng cho es6. Có ai có vấn đề es6 trong các trình duyệt khác nhau. Cảm ơn
bmnepali

làm việc cho tôi trên angular2.1.0. trình biên dịch 2.1.0 core 2.1.0 common2.1.0 rxjs5.0.0-beta.12 platform-browser2.1.0
farhad goodarzi

Cảm ơn bạn! Bạn đã tiết kiệm cho tôi rất nhiều thời gian
Cristian Traìna

63

Chung kết góc 2

- Hỗ trợ es5 (Hoạt động hoàn hảo với TS 2.0.0 +)

Mỗi bản cập nhật es6-shimhiện không được hỗ trợ, nếu bạn có cả hai kiểu chữ được cài đặt cùng nhau es6-shim& core-jscùng nhau. Xóa es6-shimgõ bằng cách đề cập trong tsconfig.json. Bây giờ bạn có thể tham khảo bên dưới core-jsgõ để được es5hỗ trợ bên trongmain.ts

///<reference path="./../typings/globals/core-js/index.d.ts"/>

tsconfig.json

exclude: [
   "node_modules", //<-- this would be needed in case of VS2015
   "node_modules/@typings",
   "typings"
]

- Suppport

Bạn chỉ cần đặt thuộc "target"tính thành es6, sau đó tất cả sẽ lỗi. Và mã được phiên mã sẽ có es6định dạng.


Cảm ơn rât nhiều. Tôi không có cơ hội để tìm thấy điều đó một mình.
Stav Alfi

@StavAlfi np .. điều đó xảy ra .. Rất vui được giúp bạn .. Cảm ơn :)
Pankaj Parkar

Với phiên bản beta.7, nó nên được cài đặt nếu bạn sử dụng thiết lập dự án trong hướng dẫn khởi động nhanh. Bạn sử dụng bản beta nào của Angular? Tôi xác nhận thay đổi đột phá với phiên bản beta.0.0 góc cạnh
Marc

1
Gói.json trong hướng dẫn khởi động nhanh hỗ trợ phiên bản thực tế của góc 2. Nếu bạn sao chép gói.json. tscconfig.json và typings.json vào thư mục gốc dự án của bạn và gọi npm -install thiết lập dự án sẽ ổn.
Marc

3
@PankajParkar 2.0.0-rc.1. Tôi chỉ bắt đầu sử dụng Angular vài ngày trước tôi đã làm việc mặc dù các tài liệu bắt đầu [ở đây] (). Trong package.jsonhọ đặt "angular2-in-memory-web-api": "0.0.7"và phần còn lại của các công cụ góc xuất phát từ "@angular/<module>": "2.0.0-rc.1"nơi <module>common, compiler, core, http, platform-browser, platform-browser-dynamic, router, router-deprecatedupgrade.
Hector

42

Cập nhật kể từ angular-2.0.0-rc.4

TLDR;

  1. Dịch sang es6

    • lỗi sẽ biến mất (w / một số vấn đề).
  2. Dịch sang es5

    • cài đặt đánh máy
    • cài đặt shim es6
    • hãy chắc chắn rằng nó biên dịch với mã của bạn.
    • lỗi biến mất

Dành cho độc giả:

Tùy chọn 1: Chuyển mã sang es6 hoặc es2015

tsconfig.json:

{
  "compilerOptions": {
    "target": "es6",
    "module": "system",
    "moduleResolution": "node",
     ...
  },
"exclude": [
    "node_modules",
    "jspm_packages"
  ]
}

Hãy nhớ rằng uglifyjs không hỗ trợ es6 vào lúc này . Điều này có thể ảnh hưởng đến bạn làm cho bó sản xuất.

Tùy chọn 2: Transpile sang es5, cài đặt các kiểu chữ, sau đó cài đặt es6-shim:

tsconfig.json:

{
  "compilerOptions": {
    "target": "es5",
    "module": "system",
    "moduleResolution": "node",
     ...
  },
  "exclude": [
    "node_modules",
    "jspm_packages"
  ]
}

Cài đặt kiểu chữ, sau đó cài đặt es6-shim:

npm install typings --saveDev
typings install dt~es6-shim --global --save

Nếu bạn đi theo lộ trình này, bạn cần đảm bảo rằng trình biên dịch bản thảo có thể tìm thấy tệp .d.ts.

Bạn có hai lựa chọn:

a. Đảm bảo tsconfig.json của bạn ở cùng cấp độ với thư mục đánh máy.

b. Bao gồm một tham chiếu trong tệp main.ts của bạn trong đó ứng dụng angular2 của bạn được bootstrapping.

Tùy chọn A: Đảm bảo tsconfig.json của bạn ở cùng cấp độ với thư mục đánh máy.

Lưu ý: KHÔNG sử dụng cờ loại trừ để loại trừ thư mục đánh máy.

project
|-- src
|-- node_modules
|-- package.json
|-- typings
|-- tsconfig.json

Tùy chọn B: Tham chiếu trong tệp chính trước khi bootstrap (Đừng làm điều này):

Như thể hiện trong các câu trả lời khác, tập tin này không còn được bao gồm bởi Angular

chính

/// <reference path="../../typings/globals/es6-shim/index.d.ts" />

2
Tùy chọn 1 hoạt động hoàn toàn tốt cho RC4. Đảm bảo xóa core-js và các kiểu chữ khác cung cấp Promise, Map, v.v. để tránh xung đột không gian tên.
wtfzn

1
Cảm ơn, 1 làm việc. Cần core-js hoặc es6-shim (không phải cả hai). Và sau đó bao gồm ./typings/index.d.ts trong quá trình biên dịch ts của bạn.
k3a

1
--saveDevbây giờ không hoạt động. --save-devlàm.
George Sovetov

1
Không nên typingsđược cài đặt trên toàn cầu?
George Sovetov


8

Đây là những gì làm việc cho tôi.

kiểm tra nếu có một typings.jsontập tin,

Nó trông giống như thế này,

{
  "globalDependencies": {
    "core-js": "registry:dt/core-js#0.0.0+20160317120654",
    "jasmine": "registry:dt/jasmine#2.2.0+20160505161446",
    "node": "registry:dt/node#6.0.0+20160613154055"
  }
}

Cài đặt gói typings trên toàn cầu.

sudo npm install -g typings

sau khi cài đặt typings , chạy

typings install

sau đó khởi động lại máy chủ.


6

Tôi gặp vấn đề tương tự khi nó không nhận ra phương thức Promise.resolve () . Tôi đã thay đổi giá trị "mục tiêu" từ ES5 thành ES6 trong tsconfig.json . Điều đó đã giải quyết vấn đề.

Hi vọng điêu nay co ich.


Vâng, điều này đã giúp tôi chắc chắn - đã thay đổi giá trị "mục tiêu" từ ES5 sang ES6 trong tsconfig.json.
Greg Trevellick

5

Vì Angular 2 đã chuyển sang RC 0, /angular2/typings/browser.d.ts không còn là một phần của phân phối Angular 2. Các tập tin có thể được cài đặt riêng.

Từ đây: https://github.com/angular/angular/issues/8513 có một vài lựa chọn. Người làm việc cho tôi là:

typings install es6-shim --ambient --save

// In your app.ts
/// <reference path="typings/browser.d.ts" />

1
Cảm ơn vì điều này, nhưng lệnh cho các kiểu chữ 1.0+ là: typings cài đặt dt ~ es6-shim --save --global ( github.com/typings/typings/issues/517 ) và sau đó sử dụng /// < Reference path = " đánh máy / es6-shim / es6-shim.d.ts "/>
Simon Trewhella

4

Tôi đã cố gắng khắc phục sự cố này mà không phải thêm bất kỳ tham chiếu ba dấu gạch chéo nào vào tệp bootstrap TS, đổi thành ES6 (mang đến một loạt các vấn đề, giống như @DatBoi nói) cập nhật các bản dựng của VS2015 NodeJSvà / hoặc NPMgói hoặc cài đặt typingstrên toàn cầu.

Đây là những gì tôi đã làm trong vài bước:

  • được thêm vào typingstrong package.jsontập tin của dự án .
  • đã thêm một scriptkhối trong package.jsontệp để thực thi / cập nhật typingssau mỗi hành động NPM.
  • đã thêm một typings.jsontệp trong thư mục gốc của dự án có chứa một tham chiếu đến core-js, đây là một trong những gói shim / polyfill tốt nhất hiện có để khắc phục các sự cố ES5 / ES6.

Đây là cách package.jsontập tin trông như thế nào (chỉ dòng có liên quan):

{
  "version": "1.0.0",
  "name": "YourProject",
  "private": true,
  "dependencies": {
    ...
    "typings": "^1.3.2",
    ...
  },
  "devDependencies": {
    ...
  },
  "scripts": {
      "postinstall": "typings install"
  }
}

Và đây là typings.jsontập tin:

{
  "globalDependencies": {
    "core-js": "registry:dt/core-js#0.0.0+20160602141332",
    "jasmine": "registry:dt/jasmine#2.2.0+20160621224255",
    "node": "registry:dt/node#6.0.0+20160621231320"
  }
}

( JasmineNodekhông bắt buộc, nhưng tôi khuyên bạn nên giữ chúng trong trường hợp bạn sẽ cần trong tương lai).

Bản sửa lỗi này hoạt động tốt với Angular2 RC1 đến RC4, đây là điều tôi cần, nhưng tôi nghĩ nó cũng sẽ khắc phục các vấn đề tương tự với các gói thư viện hỗ trợ ES6 khác.

AFAIK, tôi nghĩ rằng đây là cách sửa chữa sạch nhất có thể mà không làm hỏng các cài đặt mặc định của VS2015.

Để biết thêm thông tin và phân tích chi tiết về vấn đề này, tôi cũng đề nghị đọc bài đăng này trên blog của tôi.


3

Nếu sử dụng Angular2 RC1 với kiểu chữ v1.0 +, hãy sử dụng lệnh:

typings install dt~core-js --save --global

để cài đặt định nghĩa core-js và sau đó tham chiếu chỉ mục toàn cầu của bạn trong main.ts:

/// <reference path="../../../typings/index.d.ts" />

Nếu sử dụng es6-shim hoặc một số thư viện shim khác, thay vào đó hãy cài đặt các kiểu chữ cho nó

Tham khảo https://github.com/typings/typings/issues/517


2

Tôi nhận thấy những vấn đề này xuất hiện sau khi nâng cấp từ Angular 5 lên Angular 6. Tôi đã có thể khắc phục điều này bằng cách thực hiện như sau trong VS2017:

  • Đảm bảo SDK TypeScript đã được cài đặt (thông qua Trình cài đặt Visual Studio) cho phiên bản TypeScript cụ thể của tôi, 2.9
  • Đảm bảo rằng thuộc tính dự án Mô-đun Hệ thống được đặt để khớp với thuộc tính tsconfig.json: ES2015 của tôi. Điều này thường tự động đồng bộ nếu tệp tsconfig nằm trong thư mục gốc của dự án. Tuy nhiên, vì tôi đang sử dụng mẫu VS Angular, nên nó đặt các tệp này trong thư mục con "ClientApp" và thuộc tính dự án Mô-đun Hệ thống không được đặt.

Thuộc tính dự án VS2017

tsconfig.json:

{
  "compileOnSave": false,
  "compilerOptions": {
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "lib": [
      "es2017",
      "dom"
    ],
    "module": "es2015",
    "baseUrl": "./"
  }
}

1

Tôi đã có một vấn đề tương tự khi tạo một đối tượng lời hứa trong lớp của tôi. Bằng cách thay đổi tên mục tiêu thành "es5" từ "es6" đã giải quyết vấn đề của tôi.


1

Một giải pháp khả thi khác là cài đặt lại các kiểu chữ:
Cách này hiệu quả với tôi"angular2": "2.0.0-beta.15"

  1. npm clean cache
  2. npm install
  3. npm install -g typings
  4. Xóa typingsthư mục khỏi dự án (Thư mục nơi các mô-đun đánh máy được cài đặt)
  5. typings install
  6. npm run

1

Một giải pháp tốt khác. Bạn cần tạo một tệp typings.json trong thư mục gốc của dự án với nội dung:

{
  "globalDependencies": {
    "core-js": "registry:dt/core-js#0.0.0+20160725163759",
    "jasmine": "registry:dt/jasmine#2.2.0+20160621224255",
    "node": "registry:dt/node#6.0.0+20160909174046"
  }
}

Sau đó cài đặt gói đánh máy toàn cầu hoặc cục bộ, nếu nó chưa được cài đặt (tôi đang cài đặt toàn cầu):

sudo npm install --global typings

Trong thư mục gốc của lệnh chạy lệnh:

typings install

Sau đó, vấn đề được giải quyết. Không cần thiết để thay đổi mục tiêu tsconfig thành es6 hoặc es7. Ứng dụng web của bạn không hỗ trợ sau đó một số phiên bản trình duyệt cũ.


1

Nếu bạn đến đây vì bạn thấy những lỗi này trong Visual Studio 2017 thì bạn có một vấn đề khác như trên, nếu bạn thành công trong việc biên dịch. Điều này là do dịch vụ ngôn ngữ không chọn tsconfig.json của bạn.

https://developercommunity.visualstudio.com/content/probols/208941/vs-156-ignores-tsconfigjson-and-typescriptcompileb.html

Bạn phải đặt Hành động xây dựng của tsconfig.json thành "Nội dung" (Nhấp chuột phải -> Thuộc tính), sau đó VS sẽ chọn nó.


0

Tôi tìm thấy tài liệu tham khảo trong boot.ts không phải là đường dẫn chính xác. Cập nhật đường dẫn đó để /// <reference path=">../../../node_modules/angular2/typings/browser.d.ts" />giải quyết các lỗi Promise.


0

Tôi đang đào tạo với một hướng dẫn angular2 (anh hùng).
Sau khi cài đặt @ type / core-js nhận xét trong các câu trả lời của luận án, tôi đã gặp lỗi "Định danh trùng lặp".
Trong trường hợp của tôi, nó đã được giải quyết khi xóa dòng lib trong tsconfig.json.

// "lib": ["es2015", "dom"]


-1

cấu trúc tập tin của tôi như sau:

project
 |--node-modules
 |   |--angular2
 |   |   |--typings
 |   |   |   |--browser.d.ts
 |--src
 |--app.ts

dán bên dưới vào đầu ứng dụng của bạn và vấn đề của bạn đã được giải quyết

/// <reference path=">../../../node_modules/angular2/typings/browser.d.ts" />

Việc thay đổi mục TARGET để trỏ đến ES6 trong tsconfig.json đã khắc phục sự cố này cho tôi như được chỉ ra trong một số câu trả lời ở trên.
TheCopyPaster

-1

Tôi gặp vấn đề tương tự và có thể tìm thấy nó trong github https://github.com/angular/angular-cli/issues/1901 , nói rằng đó là một vấn đề typescript@2.0.2.

Việc hạ cấp bản thảo cho 2.0.0cả toàn cầu và địa phương đã giúp tôi giải quyết nó.

Toàn cầu:

npm uninstall typescript -g
npm cache clean
npm install typescript@2.0.0 -g

Tại địa phương: GO vào thư mục dự án bạn tạo bởi ng mới

npm uninstall typescript
npm cache clean
npm install typescript@2.0.0

Tôi cũng đã thay đổi phiên bản của nguyên cảo trong package.json từ ^2.0.0đến 2.0.0, nhưng nó đã không làm việc cho đến khi tôi hạ cấp lắp đặt nguyên cảo địa phương.


Tại sao mọi người lại hạ thấp điều này, tôi muốn biết tại sao đây là một ý tưởng tồi. Nếu bản thảo là ngôn ngữ được dịch mã và được chuyển đổi thành javascript, thì nó chỉ an toàn như trình duyệt của bạn, vì vậy nó không giống như bất kỳ rủi ro nào, phải không?
dùng3505901
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.