无法找到同一文件中定义的名称;如何实现 union 类型的 const 值?
Cannot find name defined in same file; How to achieve union type of const values?
我导出了一些字符串常量并尝试将它们用于同一文件中的类型定义,但它不起作用。
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'.
我可以通过使用字符串值本身定义我的类型来解决这个问题,即
export type THypoAction =
'SET_DETERMINATION'
| 'SET_HIGHLIGHTING'
| 'SET_TEXT';
但这似乎比引用常量更脆弱。
有什么方法可以实现以下目标吗?
- 仅声明一次文字字符串值
- 导出常量及其字符串值
- 定义常量字符串值的联合类型
对于上下文,我希望构建一个 reducer,它将接受遵循如下接口的分派操作(仅具有更具体的有效负载)
export interface IHypoAction {
type: THypoAction;
payload?: any;
}
在引用它的模块中,我因此需要常量及其接口的类型定义。
这就是您要查找的内容:https://github.com/Microsoft/TypeScript/pull/15486
它将在 2.4 中可用。
你遇到的问题是 const X
是一个值,而不是一个类型。因此你不能在接受类型的 type THypoAction = ...
中使用它。
@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;
我导出了一些字符串常量并尝试将它们用于同一文件中的类型定义,但它不起作用。
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'.
我可以通过使用字符串值本身定义我的类型来解决这个问题,即
export type THypoAction =
'SET_DETERMINATION'
| 'SET_HIGHLIGHTING'
| 'SET_TEXT';
但这似乎比引用常量更脆弱。
有什么方法可以实现以下目标吗?
- 仅声明一次文字字符串值
- 导出常量及其字符串值
- 定义常量字符串值的联合类型
对于上下文,我希望构建一个 reducer,它将接受遵循如下接口的分派操作(仅具有更具体的有效负载)
export interface IHypoAction {
type: THypoAction;
payload?: any;
}
在引用它的模块中,我因此需要常量及其接口的类型定义。
这就是您要查找的内容:https://github.com/Microsoft/TypeScript/pull/15486
它将在 2.4 中可用。
你遇到的问题是 const X
是一个值,而不是一个类型。因此你不能在接受类型的 type THypoAction = ...
中使用它。
@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;