当前位置: 首页 > 知识库问答 >
问题:

如何基于TypeScript中的接口文件定义创建对象?

秦宏硕
2023-03-14

我定义了这样一个接口

interface IModal {
    content: string;
    form: string;
    href: string;
    $form: JQuery;
    $message: JQuery;
    $modal: JQuery;
    $submits: JQuery;
 }

我这样定义一个变量:

var modal: IModal;

然而,当我尝试设置modal的属性时,它会给我一个消息,说

"cannot set property content of undefined"

使用接口来描述模态对象可以吗?如果可以,我应该如何创建它?

共有3个答案

应俊爽
2023-03-14

如果您使用的是React,解析器将无法使用传统的cast语法,因此在中引入了一种替代方法。tsx文件

let a = {} as MyInterface;

https://www.typescriptlang.org/docs/handbook/jsx.html

仲孙夕
2023-03-14

如果需要接口的空对象,可以执行以下操作:

var modal = <IModal>{};

使用接口代替类来构造数据的优点是,如果类上没有任何方法,它将在编译的JS中显示为空方法。例子:

class TestClass {
    a: number;
    b: string;
    c: boolean;
}

汇编成

var TestClass = (function () {
    function TestClass() {
    }
    return TestClass;
})();

没有任何价值。另一方面,接口在仍然提供数据结构化和类型检查的好处的情况下,根本不会出现在JS中。

欧阳睿范
2023-03-14

如果您正在其他地方创建“modal”变量,并且希望告诉TypeScript这一切都将完成,您可以使用:

declare const modal: IModal;

如果您想创建一个变量,该变量实际上是TypeScript中IModal的一个实例,那么您需要完全定义它。

const modal: IModal = {
    content: '',
    form: '',
    href: '',
    $form: null,
    $message: null,
    $modal: null,
    $submits: null
};

或者使用类型断言撒谎,但是您将失去类型安全性,因为您现在将在意外的地方得到未定义,并且可能在访问modal.content等(合同中说会有的属性)时出现运行时错误。

const modal = {} as IModal;

示例类

class Modal implements IModal {
    content: string;
    form: string;
    href: string;
    $form: JQuery;
    $message: JQuery;
    $modal: JQuery;
    $submits: JQuery;
}

const modal = new Modal();

你可能会想“嘿,这真的是界面的复制品”——你是对的。如果Modal类是IModal接口的唯一实现,那么您可能希望完全删除该接口并使用。。。

const modal: Modal = new Modal();

而不是

const modal: IModal = new Modal();
 类似资料:
  • 我想定义一个带有对象和不同类型的接口,例如 在定义上,没有问题,但在调用like后 这不起作用,并出现以下错误 错误错误:未捕获(promise中):TypeError:无法设置未定义的属性“名称”TypeError:无法设置未定义的属性“名称” 有一些相似的主题,但它们并不完全相关。(如何在类型脚本接口中定义对象或者如何在类型脚本中定义对象变量的类型?) 我很感激你帮助我找到解决办法。

  • 我目前正在做一个ReactJS项目,它使用了Webpack2和TypeScript。除了一件事之外,一切都运行得很好——我找不到一种方法将我自己编写的接口移动到单独的文件中,以便它们对整个应用程序可见。 出于原型设计的目的,我最初在使用它们的文件中定义了接口,但最终我开始添加一些在多个类中需要的接口,这时所有的问题都开始了。无论我对我的< code>tsconfig.json做什么更改,也无论我把

  • 把大象装进冰箱分几步?三步:把冰箱门打开,把大象装进去,关门,搞定~ 新建接口分几步?也是三步: 获取权限 找到一个项目 新建接口 搞定~ 获取权限 新用户登录拥有 个人空间 分组下的全部权限,个人空间分组仅自己可见,因此可以在这里任意试用 YApi 的功能。 除此以外没有任何项目或分组的权限,只能浏览已存在分组下面的公开项目。 如果找不到想找的项目,可能是尚未成为项目成员,此时应联系 项目组长

  • 有了钩子,功能性React组件不再是无状态组件。它可以有状态,所以为功能组件定义状态接口是有意义的。 虽然打字稿不会抛出任何错误/警告,但最好定义一下。 需要帮助做同样的事情。

  • 我想从另一个对象创建一个< code>ExampleInterface对象,但只保留< code>ExampleInterface包含的那些属性。 是否可以不手动复制每个密钥? 然后呢 提前谢谢你。

  • 问题内容: 这段代码是如何工作的,我完全感到困惑。 问题答案: 使用该语法,您可以创建一个完全合法的匿名类。 在内部,匿名类被编译为它们自己的类,在封闭类的名称位于符号之前的地方称为该类。并为每个其他匿名类增加。这意味着正在创建以下类: 然后,编译中的代码以在内部使用新定义的匿名类: