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 = |
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; } |
因此,在引用它的模块中,我需要常量及其接口的类型定义。
- 尝试 export const SET_DETERMINATION: ‘SET_DETERMINATION’ = ‘SET_DETERMINATION’; 等。
- 即使这样,用 SET_DETERMINATION 定义类型仍然不起作用。
这就是你要找的东西:https://github.com/Microsoft/TypeScript/pull/15486
它将在 2.4 中可用。
你遇到的问题是 const X 是一个值,而不是一个类型。因此,您不能在接受类型的 type THypoAction = … 中使用它。
- 再加上它已经在夜间构建中,所以使用 yarn add typescript@next –dev 我们已经可以使用它了。谢谢
- …但是 Angular CLI 1.0.4 只支持 TypeScript ~2.3.1,所以我们仍然需要等待。
@unional 我正在使用 ts 2.6.1,但它不起作用。在以下代码示例中,ts 找不到名称 \\’SET_TOKEN\\’,但如果我将其括为字符串 readonly type: ‘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’; /* Some other classes here */ export class SetToken implements Action { export type AuthActions = |
来源:https://www.codenong.com/44080165/
