【问题标题】:Typescript shorthand for interfaces or types with properties of same type具有相同类型属性的接口或类型的 Typescript 简写
【发布时间】:2019-02-28 12:23:58
【问题描述】:

TypeScript 中是否有一种糖语法,我可以说所有接口(/类型)属性的类型都是相同的,而不是针对每个属性提及它。

例如:

export interface allStrings {
    prop1: string;
    prop2: string;
}

// Sugard as something like this(Pseudo)
export interface allStrings<string> {
    prop1,popp2;
}

编辑:我不是在寻找一个接口来说明具有所有字符串类型值的对象,而是更多仅具有指定键的对象并且每个对象都有一个字符串类型的值。

【问题讨论】:

    标签: typescript


    【解决方案1】:

    您要查找的内容类似于Record&lt;'prop1' | 'prop2', string&gt;

    【讨论】:

    • 唯一的挑战是我不能在接口 defn 中使用 Record 语法,而只能键入 defn。例如:type A {a: Record} 很好,但是 interface A {a: Record} 抱怨
    【解决方案2】:
    export interface AllSameType<T> {
        [k: string]: T;
    }
    

    这是一个对象的接口,具有任何名称的属性,并且所有属性都将是相同的类型,T。

    用法:

    const strs: AllSameType&lt;string&gt; = { a: '', b: 1 }; // Error, b is not string

    【讨论】:

    • 我仍然想限制键的内容。就像在我的示例中一样,我希望对象只有 prop1 和 prop2。
    • 那么唯一的“短”版本是这样的:export interface AllSameType&lt;T&gt; { prop1: T; prop2: T; } 并使用类似:const strs: AllSameType&lt;string&gt;,但它不会更短。您仍然必须在每个属性上键入通用 T。您正在寻找的完全是不可能的。
    • 这是通用类型。我正在寻找一种糖语法。
    • 你正在寻找的东西是不可能的。
    猜你喜欢
    • 2013-03-28
    • 1970-01-01
    • 2022-01-27
    • 2023-01-14
    • 2021-07-24
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    相关资源
    最近更新 更多