我导出一些字符串常量并尝试将它们用于同一文件中的类型定义,但它不起作用。
export const SET_DETERMINATION = 'SET_DETERMINATION';
export const SET_HIGHLIGHTING = 'SET_HIGHLIGHTING';
export const SET_TEXT = 'SET_TEXT';
export type THypoAction =
SET_DETERMINATION
| SET_HIGHLIGHTING
| SET_TEXT;
TS2304:找不到名称'SET_DETERMINATION'。
TS2304:找不到名称'SET_HIGHLIGHTING'。
TS2304:找不到名称'SET_TEXT'。
我可以通过使用字符串值本身定义我的类型来解决这个问题,即
export type THypoAction =
'SET_DETERMINATION'
| 'SET_HIGHLIGHTING'
| 'SET_TEXT';
但这似乎比引用常量更脆弱。
有什么方法可以实现以下目标吗?
对于上下文,我希望构建一个reducer,它将接受遵循以下接口的调度操作(仅使用更具体的有效负载)
export interface IHypoAction {
type: THypoAction;
payload?: any;
}
在引用它的模块中,我因此需要常量和接口的类型定义。
答案 0 :(得分:2)
您正在寻找:https://github.com/Microsoft/TypeScript/pull/15486
将在2.4中提供。
您遇到的问题是const X
是一个值,而不是一个类型。因此,您无法在接受类型的type THypoAction = ...
中使用它。
答案 1 :(得分:0)
@unional我正在使用ts 2.6.1并且它不起作用。在下面的代码示例中,ts找不到名称“SET_TOKEN”,但如果我将其括在字符串readonly type: 'SET_TOKEN';
中,则会修复此问题:
import { Action } from '@ngrx/store';
export const SIGNUP = 'SIGNUP';
export const SIGNIN = 'SIGNIN';
export const LOGOUT = 'LOGOUT';
export const SET_TOKEN = 'SET_TOKEN';
/* Some other classes here */
export class SetToken implements Action {
readonly type: SET_TOKEN; // ts error here. ts cannot find name
constructor(public payload: string) { }
}
export type AuthActions =
SignUp |
SignIn |
LogOut |
SetToken;