Extraí um código de modelo de amostra deste tutorial e executei as duas etapas abaixo para começar -
npm install // worked fine and created node_modules folder with all dependencies
npm start
// falhou com o erro abaixo-node_modules/rxjs/Subject.d.ts(16,22): error TS2415: Class 'Subject<T>' incorrectly extends base class 'Observable<T>'. Types of property 'lift' are incompatible. Type '<T, R>(operator: Operator<T, R>) => Observable<T>' is not assignable to type '<R>(operator: Operator<T, R>) => Observable<R>'. Type 'Observable<T>' is not assignable to type 'Observable<R>'. Type 'T' is not assignable to type 'R'. npm ERR! code ELIFECYCLE npm ERR! errno 2
Vejo que na declaração de levantamento subject.d.ts é como abaixo -
lift<T, R>(operator: Operator<T, R>): Observable<T>;
E em Observable.ts é definido como abaixo-
lift<R>(operator: Operator<T, R>): Observable<R> {
Nota: - 1. Eu sou novo no Angular2 e estou tentando controlar as coisas.
O erro pode ser devido a definições incompatíveis de método de elevação
Eu li este tópico do github
Se eu precisar instalar alguma versão diferente do rxjs, diga como desinstalar e instalar o rxjs correto.
Edit1: posso demorar um pouco para responder aqui, mas ainda recebo o mesmo erro mesmo depois de usar o typescript 2.3.4 ou rxjs 6 alpha . Abaixo está meu package.json,
{
"name": "angular-quickstart",
"version": "1.0.0",
"scripts": {
"start": "tsc && concurrently \"npm run tsc:w\" \"npm run lite\" ",
"lite": "lite-server",
"postinstall": "typings install",
"tsc": "tsc",
"tsc:w": "tsc -w",
"typings": "typings"
},
"license": "ISC",
"dependencies": {
"@angular/common": "2.0.0",
"@angular/compiler": "2.0.0",
"@angular/core": "2.0.0",
"@angular/forms": "2.0.0",
"@angular/http": "2.0.0",
"@angular/platform-browser": "2.0.0",
"@angular/platform-browser-dynamic": "2.0.0",
"@angular/router": "3.0.0",
"@angular/upgrade": "2.0.0",
"core-js": "^2.4.1",
"reflect-metadata": "^0.1.3",
"rxjs": "6.0.0-alpha.0",
"systemjs": "0.19.27",
"zone.js": "^0.6.23",
"angular2-in-memory-web-api": "0.0.20",
"bootstrap": "^3.3.6"
},
"devDependencies": {
"concurrently": "^2.2.0",
"lite-server": "^2.2.2",
"typescript": "2.3.4",
"typings": "^1.3.2"
}
}
angular
typescript
rxjs
Deepak S
fonte
fonte
Respostas:
De acordo com isso, você precisa atualizar o typescript 2.3.4 ou rxjs 6 alpha
Vá para o seu arquivo package.json no seu script de atualização do projeto ou versão rxjs. Exemplo
Faz
npm install
atualização (29/06/2017): -
De acordo com o
"2.4.0"
trabalho datilografado dos comentários .fonte
"typescript": "^2.3.4"
corresponderá a 2.4.1 e 2.4 é a versão que expõe o problema com RxJS."typescript": "2.3.0"
e"rxjs": "5.4.1"
funcionou para mimComo outros apontaram, este problema surgiu como consequência da verificação de tipo mais rigorosa de genéricos introduzida no TypeScript 2.4. Isso expôs uma inconsistência em uma definição de tipo RxJS e, consequentemente, foi corrigido na versão RxJS 5.4.2 . Portanto, a solução ideal é apenas atualizar para 5.4.2.
Se você, por algum motivo, não puder atualizar para 5.4.2, deve usar a solução de Alan Haddad de aumentar a declaração de tipo para corrigi-la em seu próprio projeto. Ou seja, adicione este snippet ao seu aplicativo:
Sua solução não deixará outros efeitos colaterais e, portanto, é excelente. Alternativamente, as soluções propostas têm mais efeitos colaterais para a configuração do seu projeto e, portanto, são menos ideais:
--noStrictGenericChecks
. No entanto, isso o tornará menos estrito para seu próprio aplicativo, o que você pode fazer, mas pode introduzir definições de tipo inconsistentes como fez nesta instância RxJS que, por sua vez, pode introduzir mais bugs em seu aplicativo.fonte
Uma abordagem band-aid admitida é adicionar o seguinte ao seu arquivo tsconfig.json até que o pessoal do RxJS decida o que eles querem fazer sobre o erro ao usar o TypeScript 2.4.1:
fonte
skipLibCheck
. Se estiver fazendo isso, você está potencialmente superando outros problemas. A melhor solução énoStrictGenericChecks
até que o RxJS seja atualizado.Você pode contornar temporariamente o problema usando o Aumento de Módulo
O código a seguir resolveu o problema para mim. Uma vez que o RxJS possui uma versão estável que não apresenta esse problema, ele deve ser removido.
Embora seja talvez irônico que o próprio RxJS faça uso tão intenso dessa técnica para descrever sua própria forma, ela é geralmente aplicável a uma série de problemas.
Embora certamente haja limites e arestas, parte do que torna essa técnica poderosa é que podemos usá-la para aprimorar as declarações existentes, tornando-as mais seguras para tipos, sem bifurcar e manter o arquivo inteiro.
fonte
"paths"
intsconfig.json
para especificar explicitamente onde"rxjs"
e"rxjs/*"
deve resolver a verificação de tipo. No entanto, ter várias versões pode causar problemas de tempo de execução. Mesmo se você não usarinstanceof
e outros testes semelhantes, seus departamentos podem ser menos baseados em princípios. A melhor coisa a fazer é abrir um problema com videogular2 sugerindo mudar RxJS para uma dependência de par.em package.json
"rxjs": "^5.4.2",
e "typescript": "^ 2.3.4", então npm install e ng servem para seu funcionamento.fonte
Apenas um pouco de detalhe, na tentativa de colocar meus dois centavos.
O problema surge quando atualizamos o Typescript para a versão mais recente, que agora era o TypeScript 2.4.1 , ["como amamos as atualizações :) "] e conforme mencionado por @ :) @Jonnysai em sua resposta e no link fornecido lá, há uma discussão detalhada sobre o problema e suas correções.
Então, o que funcionou para mim foi:
1. Eu tive que Un instalar typescript 2.4.1 primeiro, indo para Painel de Controle > Programas e Recursos ...
2. Instale, de novo, original datilografado 2.4.0 , e, em seguida, certifique-se, em
package.json
arquivo, você tem essa configuração, conforme mencionado aqui em um detalhe mais curto. Você pode baixar typescript 2.4.0 a partir daqui , para o Visual Studio 2015fonte
Você pode usar temporariamente o
--noStrictGenericChecks
sinalizador para contornar isso no TypeScript 2.4.Isso está
--noStrictGenericChecks
na linha de comando ou apenas"noStrictGenericChecks": true
no"compilerOptions"
campo emtsconfig.json
.Lembre-se de que o RxJS 6 terá isso corrigido.
Veja esta pergunta semelhante: Como faço para contornar este erro no RxJS 5.x no TypeScript 2.4?
fonte
Altere a seguinte linha de
Subject.d.ts
arquivo:para:
O tipo de retorno provavelmente deve ser em
Observable<R>
vez deObservable<T>
fonte
Mantenha a opção noStrictGeneric verdadeira no arquivo tsconfig.config
fonte
Adicione "noStrictGenericChecks": true no arquivo tsconfig.json no nó "compilerOptions" conforme mostrado na imagem abaixo e compilar o aplicativo. Eu enfrentei o mesmo erro depois de adicionar este erro resolvido.
fonte
Encontrei o mesmo problema e o resolvi usando "rxjs": "5.4.1" , "typescript": "~ 2.4.0" e adicionando "noStrictGenericChecks": true em tsconfig.json.
fonte
RxJS 6 terá isso corrigido, mas como uma solução temporária, você pode usar o
noStrictGenericChecks
opção compilador.Em
tsconfig.json
, coloque-ocompilerOptions
e defina-o como verdadeiro.Na linha de comando é
--noStrictGenericChecks
.Por que está acontecendo:
O TypeScript 2.4 tem uma alteração de rigidez e o Assunto não está se elevando para o Observável correto. A assinatura realmente deveria ter sido
Isso será corrigido no RxJS 6.
fonte
Vá para o arquivo Package.json e modifique a configuração abaixo
Vai funcionar
fonte
Usar o acima exposto sozinho não ajudou, no entanto, usar a seguinte abordagem: Como faço para contornar este erro “Assunto incorretamente estende observável” no TypeScript 2.4 e RxJs 5
resolveu os problemas. Também é mencionado lá que o problema foi corrigido no RxJs 6, então esta é mais uma correção temporária, que me ajudou a executar com sucesso este ótimo exemplo (que compilou antes, mas deu o erro durante o tempo de carregamento): Desenvolvimento de aplicativo Angular 4 com Bootstrap 4 e TypeScript
fonte
reinstalando rxjs -> npm install rxjs @ 6 rxjs-compat @ 6 --save
fonte
Agora não precisamos do módulo nativo iônico - precisamos apenas @ nativo iônico / core. Corre
Isso vai resolver o seu problema ..
fonte
apenas adicione
para o seu tsconfig.json
fonte
obrigado a resposta do zmag e Rahul Sharma, funciona! @zmag @Rahul Sharma
meu problema é o seguinte:
typings/globals/core-js/index.d.ts:3:14 - error TS2300: Duplicate identifier
Faça alterações como.
Vá para o arquivo Package.json e modifique a configuração abaixo
fonte
sim, o problema era com o TypeScript 2.4.1 Acabei de desinstalar isso do painel de controle e funciona para mim como Visual Studio 2017 já tem isso.
fonte