为通用类型分配默认值

时间:2020-10-29 00:50:44

标签: typescript generics

我目前正在学习TypeScript,正在阅读有关如何为通用类型分配默认值的信息。例如,对于MyGenericWithDefault,默认值为字符串。我的问题是,myTypeWhichIsStringIfNotSpecified也是一个字符串吗?

此外,myGeneric1表示默认值现在是数字吗? myGeneric2myGeneric3保留为字符串吗?我对那里发生的事情感到困惑?
任何解释表示赞赏,

interface MyGenericWithDefault<T = string> {
    myTypeWhichIsStringIfNotSpecified: T;
}
const myGeneric1: MyGenericWithDefault<number> = { myTypeWhichIsStringIfNotSpecified: 1 };
const myGeneric2: MyGenericWithDefault = { myTypeWhichIsStringIfNotSpecified: "string" };
const myGeneric3: MyGenericWithDefault<string> = { myTypeWhichIsStringIfNotSpecified: "string" };

1 个答案:

答案 0 :(得分:0)

interface MyGenericWithDefault描述了对象的格式。您可以创建适合您接口的无限多个 instances 对象,并且每个对象都有自己的T。每个对象的T仅是该对象固有的,对使用该接口的其他对象没有影响。

MyGenericWithDefault<T = string>中的默认值意味着应用此类型的每个对象都将具有为其提供的值类型,例如<number><string>(如果未提供任何类型)。

// T is number
const myGeneric1: MyGenericWithDefault<number> = { myTypeWhichIsStringIfNotSpecified: 1 };

// T is string
const myGeneric2: MyGenericWithDefault = { myTypeWhichIsStringIfNotSpecified: "string" };

// T is string
const myGeneric3: MyGenericWithDefault<string> = { myTypeWhichIsStringIfNotSpecified: "string" };

myGeneric2myGeneric3的类型是等效的,因为您显式设置的值等于默认值。对于myGeneric3,某些短毛绒实际上会警告您不必要的泛型,因为此处包含<string>是没有意义的(尽管它可以提高可读性)。