Cannot find name defined in same file; How to achieve union type of const values?
我导出了一些字符串常量并尝试将它们用于同一文件中的类型定义,但它不起作用。
1 2 3 4 5 6 7 8 | 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: Cannot find name 'SET_DETERMINATION'.
TS2304: Cannot find name 'SET_HIGHLIGHTING'.
TS2304: Cannot find name 'SET_TEXT'.
我可以通过使用字符串值本身定义我的类型来解决这个问题,即
1 2 3 4 | export type THypoAction = 'SET_DETERMINATION' | 'SET_HIGHLIGHTING' | 'SET_TEXT'; |
但这似乎比引用常量更脆弱。
有什么方法可以实现以下目标吗?
对于上下文,我希望构建一个reducer,它将接受遵循如下接口的调度操作(仅具有更具体的有效负载)
1 2 3 4 | export interface IHypoAction { type: THypoAction; payload?: any; } |
因此,在引用它的模块中,我需要常量及其接口的类型定义。
这就是你要找的东西:https://github.com/Microsoft/TypeScript/pull/15486
它将在 2.4 中可用。
你遇到的问题是
@unional 我正在使用 ts 2.6.1,但它不起作用。在以下代码示例中,ts 找不到名称 \\'SET_TOKEN\\',但如果我将其括为字符串
,则此问题已修复
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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; |