创建了可以接受任何类型的泛型StateManagierService,在状态改变时,用户可以获得新的状态和数据(如果有的话).但是你看,我遗漏了一些东西.

export class StateManagierService<T> {
  private _state$: BehaviorSubject<T>;

  protected constructor (initialState: T) {
    console.log("initialState",initialState)
    this._state$ = new BehaviorSubject(initialState);
  }

  get state$ (): Observable<T> {
    return this._state$.asObservable();
  }

  get state (): T {
    return this._state$.getValue();
  }

  changeState (nextState: T): void {
    if(this.state === nextState || nextState === null) return;
    this._state$.next(nextState);
  }
}

用户可以创建的不同州

export enum state1{
    A =1,
    B
}

Wraper类将创建Obj并可以添加更多数据|属性

export class Wrap {
    constructor(stateId: state1, data?:any){
        console.log("stateId", stateId, data)
    }
}

@Injectable({
    providedIn: 'root'
})
export class serviceImpl extends StateManagierService<Wrap> {
    constructor(){
        super(new Wrap(state1.A, 'text1')); // Expecting Wrap object to set but not
    }

}

测试服务判断

class hello {
    constructor(private serviceImpl: serviceImpl){

    }
    one(){
        this.serviceImpl.state$.subscribe(res=>{
          console.log('res', res) // Expecting Wrap object  What im doing wrong
        })
        this.serviceImpl.changeState(new Wrap(state1.B, 'text23'))
    }
}

推荐答案

为了让Angular 通过快捷方式方法初始化构造函数中的属性,我们需要将其定义为private stateId: state1,这样做可以解决您的问题!

所以<<Access Specifier>> <<propertyName>> : <<Property Type>>,这将是格式!

export class Wrap {
  constructor(private stateId: state1, private data?: any) { // <- changed here!
    console.log('stateId', stateId, data);
  }
}

stackblitz demo

Typescript相关问答推荐

如何在Jest中嘲笑location.back()方法调用进行Angular 组件测试?

在这种情况下,如何获得类型安全函数的返回值?

如何使类型只能有来自另一个类型的键,但键可以有一个新值,新键应该抛出一个错误

如何修复正在处理类型但与函数一起使用时不处理的类型脚本类型

在使用Typescribe时,是否有一种方法可以推断映射类型的键?

react 路由6操作未订阅从react 挂钩表单提交+也不使用RTK查询Mutations

在动态对话框中使用STEP组件实现布线

更新为Angular 17后的可选链运算符&?&问题

获取函数中具有动态泛型的函数的参数

在列表的指令中使用intersectionObservable隐藏按钮

类型脚本可以推断哪个类型作为参数传递到联合类型中吗?

如何从MAT-FORM-FIELD-MAT-SELECT中移除焦点?

转换器不需要的类型交集

对象类型的TypeScrip隐式索引签名

具有匹配功能的TS通用事件处理程序

对于VUE3,错误XX不存在于从不存在的类型上意味着什么?

通过函数传递确切的类型,但验证额外的字段

Typescript 是否可以区分泛型参数 void?

在类型{}上找不到带有string类型参数的索引签名 - TypeScript

使用 fp-ts 时如何使用 TypeScript 序列化任务执行?