TS2322:类型 'T' 不可分配给类型 'never'

TS2322: Type 'T' is not assignable to type 'never'

我正在将一些 JS 移植到 TS,并且有一个简单的应用程序状态模块,它允许我设置一个 属性 以供以后检索。当ts编译器到达setAppState函数内部的state[propertyName] = value;行时,抛出如下错误

TS2322: Type 'T' is not assignable to type 'never'.

我搜索了这个错误,但 none 的其他答案似乎解决了我正在使用括号表示法设置对象 属性 的这种情况。

这是我的代码...

export interface appState {
  context: typeof cast.framework.CastReceiverContext,
  senderId: string,
  requestId: number,
  sessionId: string,
}

const state: appState = {
  context: null,
  senderId: null,
  requestId: null,
  sessionId: null,
};

export const getAppState = (propertyName: keyof appState): keyof appState => {
  return state[propertyName];
};

export const setAppState = <T>(propertyName: keyof appState, value: T): void => {
  state[propertyName] = value;
};

我发现了另一个问题 ,它显示了在泛型 getter 和 setter 的函数签名中编写类型的正确方法,从而解决了问题。现在编译以下内容。

export const getAppState = <K extends keyof appState>(propertyName: K): appState[K] => {
  return state[propertyName];
};

export const setAppState = <K extends keyof appState>(propertyName: K, value: appState[K]): void => {
  state[propertyName] = value;
};