#angular #typescript #typescript-generics
Вопрос:
У меня есть следующий угловой сервис
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
}
}
Я внедряю сервис в свой компонент:
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 для функции set находится по адресу https://api.activejs.dev/classes/dictunit.html#set
Почему я получаю такой результат?
Я использую следующий #1 «машинопись»: «~4.1.5» — строгий режим #2 «@angular/cli»: «^11.2.12», #3 Linux Mint Ульяна
Спасибо
Ответ №1:
Необходимо явно указать, DictUnit
какой тип данных он хранит. Если ничего не указано, он будет использоваться Record<never, never>
.
Поэтому при установке возраста в вашем классе компонентов он предупредит вас, что тип несовместим (строка != никогда).
Простое исправление будет таким:
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
});
Вот код и поле для простой демонстрации:
https://codesandbox.io/s/rough-cloud-bz51m?file=/src/app/registration-state.service.ts:255-264
P.S.
Вы можете изменить неизвестный тип на более ограниченный, например string | boolean | number
.
Комментарии:
1. Большое спасибо, парень. Ценю это. Я включил строгий режим в машинописном тексте, и он возвращает меня в школу!