Typescript 使用具有严格值的接口
Posted
技术标签:
【中文标题】Typescript 使用具有严格值的接口【英文标题】:Typescript use interface with strict values 【发布时间】:2019-01-07 16:08:30 【问题描述】:我有一个 typescript/react 项目,我在其中使用 @material 组件。在@types/material__component 下有定义。 在定义中经常有类似的接口(这个来自@types/material__menu/constants.d.ts):
export interface CornerBit extends MDCNumbers
BOTTOM: 1;
CENTER: 2;
RIGHT: 4;
FLIP_RTL: 8;
现在,如果我想在我的代码中使用 CornerBit,我会这样做:
import CornerBit from "@material/menu/"
@material/menu/index.js 从声明为的 constants.js 导出 CornerBit:
const CornerBit =
BOTTOM: 1,
CENTER: 2,
RIGHT: 4,
FLIP_RTL: 8,
;
现在,当我将上面写的 CornerBit 导入我的文件并尝试这样做时:
const MyCornerBit = CornerBit;
我明白了:
TS2693: 'Corner' only refers to a type, but is being used as a value here.
所以我想我只是以某种方式导入接口,而不是 const 本身。我该如何使用这样的接口(所有属性都有明确的值)?
感觉完全没用:
const MyCornerBit: CornerBit =
BOTTOM: 1,
CENTER: 2,
RIGHT: 4,
FLIP_RTL: 8,
谢谢。
【问题讨论】:
您正在尝试将CornerBit
分配给 MyCornerBit
并且错误表明这是不正确的,因为它是一种类型。如果你想说MyCornerBit
是CornerBit
类型,那么使用: 而不是=。有点不清楚你想要实现什么
我试图使 MyCornerBit 成为具有上述值的对象。这样我就可以使用 MyCornerBit.BOTTOM、MyCornerBit.CENTER 等。
【参考方案1】:
您应该像这样将您的 const MyCornerBit
声明为 CornerBit
const MyCornerBit: CornerBit;
没有必要用匹配的属性来实例化这个常量
【讨论】:
当我执行const MyCornerBit: CornerBit;
时,我得到TS1155: 'const' declarations must be initialized
用let
声明而不是const
嗯,然后我需要禁用 tslint,因为它告诉我在未重新分配 MyCornerBit 时使用 const。但实际上是在工作。所以谢谢。不过对我来说还是有点奇怪。
好的,抱歉。它实际上不起作用。没有编译时错误或任何东西,但运行时告诉我“无法从未定义中读取 BOTTOM”
这个interface CornerBit
有可注入的装饰器吗?以上是关于Typescript 使用具有严格值的接口的主要内容,如果未能解决你的问题,请参考以下文章
Typescript 在具有严格编译器选项的 node_modules 中引发错误
对接收动作类型的 TypeScript reducer 进行类型检查