angular - TS2345: Argument av typen 'string' kan inte tilldelas till parametern av typen 'never'
Jag har följande Angular-tjänst
import { Injectable } from '@angular/core'
import { DictUnit } from '@activejs/core'
@Injectable({
providedIn: 'root',
})
export class RegistrationState {
private _dictionaryUnit = new DictUnit({
id: 'registration',
immutable: true,
persistent: true,
cacheSize: 200,
// initialValue: {},
distinctDispatchCheck: true,
})
get dictUnit() {
return this._dictionaryUnit
}
}
Jag injicerar tjänsten i min komponent:
export class AgeComponent {
age: IAge = new Age()
constructor(private regState: RegistrationState) {
}
onDobValueChanged(e: any) {
const dob = dayjs(e.value).toDate()
const years = dayjs().diff(dob, 'year')
// TS2345: Argument of type 'string' is not assignable to parameter of type 'never' - ERROR REFERES TO 'age' param
this.regState.dictUnit.set('age', this.age)
}
onDodValueChanged(e: any) {
this.age.dod = dayjs(e.value).toDate()
console.log({ dod: this.age.dod })
}
}
API:et för set-funktionen finns på https://api.activejs.dev/classes/dictunit.html#set
Varför får jag detta resultat?
Jag använder följande #1 "typescript": "~4.1.5" - strikt läge #2 "@angular/cli": "^11.2.12", #3 Linux Mint Ulyana
Tack
Svar #1
Det finns ett behov av att informera DictUnit vilken datatyp det lagrar uttryckligen. Om inget specificeras kommer det att använda Record<never, never>.
Därför, när du sätter ålder i din komponentklass, kommer det att varna dig om att typen är inkompatibel (string != never).
En enkel lösning kommer att vara så här:
private _dictionaryUnit = new DictUnit<Record<string, unknown>>({ // inform DictUnit it is storing key as string and value as unknown
id: "registration",
immutable: true,
persistent: true,
cacheSize: 200,
// initialValue: {},
distinctDispatchCheck: true
});
Här är codesandboxen för en enkel demonstration:
https://codesandbox.io/s/rough-cloud-bz51m?file=/src/app/registration-state.service.ts:255-264
P.S.
Du kan ändra den okända typen till att vara mer begränsad, som string | boolean | number.
