具有命名属性和不同类型的任意命名索引属性的打字稿接口[重复]

Posted

技术标签:

【中文标题】具有命名属性和不同类型的任意命名索引属性的打字稿接口[重复]【英文标题】:Typescript interface with named property and arbitrarily-named index properties of different type [duplicate] 【发布时间】:2015-10-12 05:46:37 【问题描述】:

我想为一个对象创建一个接口,该对象具有特定命名属性的特定类型和所有其他属性的不同类型。

如何在下面为foo 编写定义?

let foo = 
   size: 3,
   a: 'foo',
   b: 'bar',
   c: 'baz'

这将是我的直观方法:

interface Foo 
    size: number;
    [name: string]: string;

但是,TypeScript 尝试将一般定义应用于特定定义并触发以下错误:

error TS2411: Property 'size' of type 'number' is not assignable to string index type 'string'.

【问题讨论】:

【参考方案1】:

你可以这样做(我不知道它是否可以在 TS v1.5 中工作):

interface Size 
    size: number;


interface StringMap 
    [name: string]: string;


type Foo = Size & StringMap;

【讨论】:

如果您愿意,您也可以将其内联(也不是 100% 确定 ts 1.5)。 type Foo = size: number & [name: string]: string;【参考方案2】:

无需定义每个属性,这是意料之中的,但您可以这样做:

interface Foo1 
    size: number;
    [name: string]: string|number;

比使用any 更好。

【讨论】:

以上是关于具有命名属性和不同类型的任意命名索引属性的打字稿接口[重复]的主要内容,如果未能解决你的问题,请参考以下文章

010.里式转换命名空间字段属性索引器

在 TypeScript 中使用解构/扩展复制具有重命名属性的对象

C#通过反射获取不同命名空间下的类(属性和方法)

如何创建具有索引签名和不同类型的固定属性的 TypeScript 接口?

具有属性和命名空间支持的Kohana提要

核心数据:在获取时重命名属性