change - dynamic title angular 5
Angular y mecanografiado: no puedo encontrar nombres (24)
Actualice
tsconfig.json
, cambie
"target": "es5"
a
"target": "es6"
Estoy usando Angular (versión 2) con TypeScript (versión 1.6) y cuando compilo el código obtengo estos errores:
Error TS2304: Cannot find name ''Map''.
node_modules/angular2/src/core/change_detection/parser/locals.d.ts(4,42): Error TS2304: Cannot find name ''Map''.
node_modules/angular2/src/core/facade/collection.d.ts(1,25): Error TS2304: Cannot find name ''MapConstructor''.
node_modules/angular2/src/core/facade/collection.d.ts(2,25): Error TS2304: Cannot find name ''SetConstructor''.
node_modules/angular2/src/core/facade/collection.d.ts(4,27): Error TS2304: Cannot find name ''Map''.
node_modules/angular2/src/core/facade/collection.d.ts(4,39): Error TS2304: Cannot find name ''Map''.
node_modules/angular2/src/core/facade/collection.d.ts(7,9): Error TS2304: Cannot find name ''Map''.
node_modules/angular2/src/core/facade/collection.d.ts(8,30): Error TS2304: Cannot find name ''Map''.
node_modules/angular2/src/core/facade/collection.d.ts(11,43): Error TS2304: Cannot find name ''Map''.
node_modules/angular2/src/core/facade/collection.d.ts(12,27): Error TS2304: Cannot find name ''Map''.
node_modules/angular2/src/core/facade/collection.d.ts(14,23): Error TS2304: Cannot find name ''Map''.
node_modules/angular2/src/core/facade/collection.d.ts(15,25): Error TS2304: Cannot find name ''Map''.
node_modules/angular2/src/core/facade/collection.d.ts(94,41): Error TS2304: Cannot find name ''Set''.
node_modules/angular2/src/core/facade/collection.d.ts(95,22): Error TS2304: Cannot find name ''Set''.
node_modules/angular2/src/core/facade/collection.d.ts(96,25): Error TS2304: Cannot find name ''Set''.
node_modules/angular2/src/core/facade/lang.d.ts(1,22): Error TS2304: Cannot find name ''BrowserNodeGlobal''.
node_modules/angular2/src/core/facade/lang.d.ts(33,59): Error TS2304: Cannot find name ''Map''.
node_modules/angular2/src/core/facade/promise.d.ts(1,10): Error TS2304: Cannot find name ''Promise''.
node_modules/angular2/src/core/facade/promise.d.ts(3,14): Error TS2304: Cannot find name ''Promise''.
node_modules/angular2/src/core/facade/promise.d.ts(8,32): Error TS2304: Cannot find name ''Promise''.
node_modules/angular2/src/core/facade/promise.d.ts(9,38): Error TS2304: Cannot find name ''Promise''.
node_modules/angular2/src/core/facade/promise.d.ts(10,35): Error TS2304: Cannot find name ''Promise''.
node_modules/angular2/src/core/facade/promise.d.ts(10,93): Error TS2304: Cannot find name ''Promise''.
node_modules/angular2/src/core/facade/promise.d.ts(11,34): Error TS2304: Cannot find name ''Promise''.
node_modules/angular2/src/core/facade/promise.d.ts(12,32): Error TS2304: Cannot find name ''Promise''.
node_modules/angular2/src/core/facade/promise.d.ts(12,149): Error TS2304: Cannot find name ''Promise''.
node_modules/angular2/src/core/facade/promise.d.ts(13,43): Error TS2304: Cannot find name ''Promise''.
node_modules/angular2/src/core/linker/element_injector.d.ts(72,32): Error TS2304: Cannot find name ''Map''.
node_modules/angular2/src/core/linker/element_injector.d.ts(74,17): Error TS2304: Cannot find name ''Map''.
node_modules/angular2/src/core/linker/element_injector.d.ts(78,184): Error TS2304: Cannot find name ''Map''.
node_modules/angular2/src/core/linker/element_injector.d.ts(83,182): Error TS2304: Cannot find name ''Map''.
node_modules/angular2/src/core/linker/element_injector.d.ts(107,37): Error TS2304: Cannot find name ''Map''.
node_modules/angular2/src/core/linker/proto_view_factory.d.ts(27,146): Error TS2304: Cannot find name ''Map''.
node_modules/angular2/src/core/linker/view.d.ts(52,144): Error TS2304: Cannot find name ''Map''.
node_modules/angular2/src/core/linker/view.d.ts(76,79): Error TS2304: Cannot find name ''Map''.
node_modules/angular2/src/core/linker/view.d.ts(77,73): Error TS2304: Cannot find name ''Map''.
node_modules/angular2/src/core/linker/view.d.ts(94,31): Error TS2304: Cannot find name ''Map''.
node_modules/angular2/src/core/linker/view.d.ts(97,18): Error TS2304: Cannot find name ''Map''.
node_modules/angular2/src/core/linker/view.d.ts(100,24): Error TS2304: Cannot find name ''Map''.
node_modules/angular2/src/core/linker/view.d.ts(103,142): Error TS2304: Cannot find name ''Map''.
node_modules/angular2/src/core/linker/view.d.ts(104,160): Error TS2304: Cannot find name ''Map''.
node_modules/angular2/src/core/render/api.d.ts(281,74): Error TS2304: Cannot find name ''Map''.
node_modules/angular2/src/core/zone/ng_zone.d.ts(1,37): Error TS2304: Cannot find name ''Zone''.
Este es el código:
import ''reflect-metadata'';
import {bootstrap, Component, CORE_DIRECTIVES, FORM_DIRECTIVES} from ''angular2/core'';
@Component({
selector: ''my-app'',
template: ''<input type="text" [(ng-model)]="title" /><h1>{{title}}</h1>'',
directives: [ CORE_DIRECTIVES ]
})
class AppComponent {
title :string;
constructor() {
this.title = ''hello angular 2'';
}
}
bootstrap(AppComponent);
Ahora debe importarlos manualmente.
import ''rxjs/add/operator/retry'';
import ''rxjs/add/operator/timeout'';
import ''rxjs/add/operator/delay'';
import ''rxjs/add/operator/map'';
this.http.post(url, JSON.stringify(json), {headers: headers, timeout: 1000})
.retry(2)
.timeout(10000, new Error(''Time out.''))
.delay(10)
.map((res) => res.json())
.subscribe(
(data) => resolve(data.json()),
(err) => reject(err)
);
Al tener Typecript> = 2, la opción "lib" en tsconfig.json hará el trabajo. No hay necesidad de Typings. https://www.typescriptlang.org/docs/handbook/compiler-options.html
{
"compilerOptions": {
"target": "es5",
"lib": ["es2016", "dom"] //or es6 instead of es2016(es7)
}
}
Angular 2 RC1 renombró el directorio
node_modules/angular2
a
node_modules/angular
.
Si está usando un archivo Gulpfile para copiar archivos a un directorio de salida, probablemente todavía tenga
node_modules/angular
sentado allí, que puede ser recogido por el compilador y confundiendo muchísimo.
Entonces (cuidadosamente) elimine lo que tiene en
node_modules
que es para las versiones beta, y también elimine cualquier tipificación anterior y vuelva a ejecutar la
typings install
.
Buena llamada, @VahidN, descubrí que necesitaba
"exclude": [
"node_modules",
"typings/main",
"typings/main.d.ts"
]
En mi
tsconfig
también, para detener los errores de
es6-shim
Encontré este documento muy útil en el sitio web de Angular 2. Finalmente me permitió hacer que las cosas funcionaran correctamente, mientras que las otras respuestas aquí, para instalar tipings, me fallaron con varios errores. (Pero ayudó a guiarme en la dirección correcta).
En lugar de incluir es6-promise y es6-collections, incluye core-js, que fue el truco para mí ... no hay conflictos con las definiciones de ts ts de Angular2. Además, el documento explica cómo configurar todo esto para que ocurra automáticamente al instalar NPM, y cómo modificar su archivo typings.json.
Estaba obteniendo esto en Angular 2 rc1.
Resulta que algunos nombres cambiaron con Typings v1 vs el antiguo 0.x.
Los archivos
browser.d.ts
convirtieron en
index.d.ts
.
Después de ejecutar
typings install
ubique su archivo de inicio (donde inicia) y agregue:
/// <reference path="../typings/index.d.ts" />
(o sin el
../
si su archivo de inicio está en la misma carpeta que la carpeta de tipings)
Agregar
index.d.ts
a la lista de archivos en
tsconfig.json
no funcionó por alguna razón.
Además, el paquete
es6-shim
no era necesario.
Esto es lo que piensan cómo todos están tratando de hacer algo diferente. Creo que estos sistemas aún están lejos de la versión final.
En mi caso, actualicé de rc.0 a rc.5 apareció este error.
Mi solución fue cambiar el tsconfig.json.
{
"compilerOptions": {
"target": "es6", <-- It was es5
"module": "system",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false,
"outDir": "../wwwroot/app"
},
"compileOnSave": true,
"exclude": [
"../node_modules",
"../typings/main"
]
}
Hay una solución alternativa mencionada en el registro de cambios para 2.0.0-beta.6 (2016-02-11) (enlistado en cambios de última hora):
Si usa --target = es5, deberá agregar una línea en algún lugar de su aplicación (por ejemplo, en la parte superior del archivo .ts donde llama a bootstrap):
///<reference path="node_modules/angular2/typings/browser.d.ts"/>
(Tenga en cuenta que si su archivo no está en el mismo directorio que node_modules, deberá agregar uno o más ../ al inicio de esa ruta).
asegúrese de tener la ruta de referencia correcta, necesitaba agregar ../ al comienzo para que esto funcione.
Importe la siguiente declaración en su archivo JS.
import ''rxjs/add/operator/map'';
La respuesta aceptada no proporciona una solución viable, y la mayoría de los otros sugieren la solución alternativa de "tres barras" que ya no es viable, ya que el
browser.d.ts
ha sido eliminado por los últimos RC de Angular2 y, por lo tanto, no lo es. disponible más.
Sugiero encarecidamente instalar el módulo de
typings
según lo sugerido por un par de soluciones aquí, sin embargo, no es necesario hacerlo de forma manual o global: hay una manera efectiva de hacerlo solo para su proyecto y dentro de la interfaz VS2015.
Esto es lo que debes hacer:
-
agregue
typings
en el archivo package.json del proyecto. -
agregue un bloque de
script
en el archivopackage.json
para ejecutar / actualizartypings
después de cada acción de NPM. -
agregue un archivo
typings.json
en la carpeta raíz del proyecto que contenga una referencia acore-js
(en general mejor quees6-shim
atm).
Eso es.
También puede echar un vistazo a este otro hilo SO y / o leer esta publicación en mi blog para obtener detalles adicionales.
Las funciones de ES6, como las promesas, no se definen al apuntar a ES5. Hay otras bibliotecas, pero core-js es la biblioteca de JavaScript que utiliza el equipo de Angular. Contiene polyfills para ES6.
Angular 2 ha cambiado mucho desde que se hizo esta pregunta. Las declaraciones de tipo son mucho más fáciles de usar en Typecript 2.0.
npm install -g typescript
Para las funciones de ES6 en Angular 2, no necesita Typings. Simplemente use typecript 2.0 o superior e instale @ types / core-js con npm:
npm install --save-dev @types/core-js
Luego, agregue los atributos TypeRoots y Tipos a su tsconfig.json:
{
"compilerOptions": {
"target": "es5",
"module": "es6",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false,
"typeRoots": [
"../node_modules/@types"
],
"types" : [
"core-js"
]
},
"exclude": [
"node_modules"
]
}
Esto es mucho más fácil que usar Typings, como se explica en otras respuestas. Consulte la publicación del blog de Microsoft para obtener más información: Texto mecanografiado: El futuro de los archivos de declaración
Para
Angular 2.0.0-rc.0
agregar
node_modules/angular2/typings/browser.d.ts
no funcionará.
Primero agregue el
archivo typings.json
a su solución, con este contenido:
{
"ambientDependencies": {
"es6-shim": "github:DefinitelyTyped/DefinitelyTyped/es6-shim/es6-shim.d.ts#7de6c3dd94feaeb21f20054b9f30d5dabc5efabd"
}
}
Y luego actualice el archivo
package.json
para incluir este
postinstall
:
"scripts": {
"postinstall": "typings install"
},
Ahora ejecuta
npm install
También ahora debe ignorar la carpeta de
typings
en su archivo
tsconfig.json
:
"exclude": [
"node_modules",
"typings/main",
"typings/main.d.ts"
]
Actualizar
Ahora AngularJS 2.0 está utilizando
core-js
lugar de
es6-shim
.
Siga su
archivo
de inicio rápido
typings.json
para obtener más información.
Para aquellos que siguen el tutorial de
angular.io
en
angular.io
solo para ser explícitos, aquí hay una expansión de la respuesta de mvdluit de exactamente dónde colocar el código:
Su
main.ts
debería verse así:
/// <reference path="../node_modules/angular2/typings/browser.d.ts" />
import {bootstrap} from ''angular2/platform/browser''
import {AppComponent} from ''./app.component''
// Add all operators to Observable
import ''rxjs/Rx''
bootstrap(AppComponent);
Tenga en cuenta que lo deja en las barras diagonales
///
, no las elimine.
ref: https://github.com/ericmdantas/angular2-typescript-todo/blob/master/index.ts#L1
Pude arreglar esto con el siguiente comando
typings install es6-promise es6-collections --ambient
Tenga en cuenta que necesita
typings
para que el comando anterior funcione, si no lo tiene ejecute el siguiente comando para instalarlo
npm install -g typings
ACTUALIZAR
la actualización de tipings no lee
--ambient
se convirtió en
--global
también para algunas personas necesita instalar las definiciones de las bibliotecas anteriores, solo use el siguiente comando
typings install dt~es6-promise dt~es6-collections --global --save
Gracias a @bgerth por señalar esto.
Pude solucionar esto instalando el módulo de
typings
.
npm install -g typings
typings install
(Usando ng 2.0.0-rc.1)
Si
npm install -g typings typings install
todavía no ayuda, elimine las carpetas
node_modules
y
typings
antes de ejecutar este comando.
Soy nuevo en Angular pero para mí la solución se encontró simplemente importando Input. No puedo tomar crédito por este, lo encontré en otro tablero. Esta es una solución simple si tiene el mismo problema, pero si sus problemas son más complejos, leería las cosas anteriores.
Mukesh
tienes que importar entradas como esta en la parte superior del componente hijo
import { Directive, Component, OnInit, Input } from ''@angular/core'';
Tuve el mismo problema y lo resolví usando la opción
lib
en
tsconfig.json
.
Como dijo
basarat en su respuesta
, TypeScript incluye implícitamente un archivo
.d.ts
dependiendo de la opción de compilación de
target
, pero este comportamiento se puede cambiar con la opción
lib
.
Puede especificar que se incluyan archivos de definición adicionales sin cambiar la versión JS de destino.
Por ejemplo, esto es parte de mi
compilerOptions
es2015
for
es2015
y agrega soporte para
es2015
funciones
es2015
sin instalar nada más:
"compilerOptions": {
"experimentalDecorators": true,
"lib": ["es5", "dom", "es6", "dom.iterable", "scripthost"],
"module": "commonjs",
"moduleResolution": "node",
"noLib": false,
"target": "es5",
"types": ["node"]
}
Para obtener la lista completa de opciones disponibles, consulte el https://www.typescriptlang.org/docs/handbook/compiler-options.html .
Tenga en cuenta también que agregué
"types": ["node"]
e instalé
npm install @types/node
para admitir
require(''some-module'')
en mi código.
Un problema conocido: github.com/angular/angular/issues/4902
Motivo principal: el archivo
.d.ts
incluido implícitamente por TypeScript varía con el objetivo de compilación, por lo que se necesita tener más declaraciones ambientales cuando se dirige a
es5
incluso si las cosas están realmente presentes en los tiempos de ejecución (por ejemplo, Chrome).
Más sobre
lib.d.ts
agregue typing.d.ts en la carpeta principal de la aplicación y allí declare la variable que desea usar cada vez
declare var System: any;
declare var require: any;
después de declarar esto en typing.d.ts, el error para require no vendrá en la aplicación.
puede agregar el código al comienzo de los archivos .ts.
/// <reference path="../typings/index.d.ts" />
typings install dt~es6-shim --save --global
y agregue la ruta correcta a index.d.ts
///<reference path="../typings/index.d.ts"/>
Probado en @ angular-2.0.0-rc3