如何使用打字稿定义一个对象以具有不同的字段?

Posted

技术标签:

【中文标题】如何使用打字稿定义一个对象以具有不同的字段?【英文标题】:How can I define an object to have different fields using typescript? 【发布时间】:2012-10-31 02:33:30 【问题描述】:

我有以下功能:

function getAdminParams(entity) 
   params = ;
   params = 
                pk: "0006000",
                param: "?pk=0006000",
                table: "Content",
                success: true
            ;
  return params;

在另一个文件中我这样使用这个函数:

params = getAdminParams(entity);
    if (params.success) 

有没有一种方法可以使用智能感知,以便 params 对象 显示为具有“成功”参数?我看到 Typescript 有类和接口,但我不确定如何或是否可以将它们用作返回类型。

【问题讨论】:

我不确定 typescript,但请注意,从 javascript 的角度来看,函数 params = 的第一行是不需要的。它会创建一个空对象,当您将params 分配给下一行的另一个对象时,该对象将被丢弃。此外,不在该函数内声明paramsvar 意味着您正在更新全局params。对于这样的简单情况,您根本不需要函数中的 params 变量:您可以直接使用 return ... 返回一个对象文字(确保将起始 放在与return). 【参考方案1】:

如果将 params 定义为接口,则可以在函数括号后使用冒号将其声明为 getAdminParams() 的返回类型。像这样:

interface IParams 
    success: bool;
    pk: string;
    // etc...


function getAdminParams(entity): IParams 
    params = 
                pk: "0006000",
                success: true
                // etc...
            ;
    return params; // If the properties assigned do not fulfill the IParams interface, this will be marked as an error.


params = getAdminParams(entity);
if (params. // Intellisense should offer success and pk and any other properties of IParams).

getAdminParams 中,您可以将params 显式声明为新的IParams,但即使您不这样做,类型推断也会为您设置智能感知,只要您分配给params 的属性即可对象履行IParams接口中指定的契约。

当然,您的返回类型可以是类、字符串或任何其他类型,您可以使用function f(): returnType 语法以同样的方式声明。

language specification 非常详细地介绍了所有这些,或者在这里有更简短的介绍:http://www.codeproject.com/Articles/469280/An-introduction-to-Type-Script 或类似的 SO 问题:How to declare Return Types for Functions in TypeScript

【讨论】:

以上是关于如何使用打字稿定义一个对象以具有不同的字段?的主要内容,如果未能解决你的问题,请参考以下文章

如何在打字稿中过滤对象数组

打字稿中具有通用键的对象

如何将对象数组转换为在打字稿中具有动态键的单个对象

具有基于变量的标签值的打字稿匿名对象

如何使用打字稿定义猫鼬模式参考字段?

如何使用带有动态对象键的打字稿