类型和实现它的类的命名约定是什么?

时间:2019-07-15 12:47:41

标签: javascript typescript types typescript-typings

我有一个类 DropdownItem ,它为下拉选项创建了一个蓝图。

class DropdownItem {
  value: string;
  name: string;
  ....
}

是否还有其他仅将其命名为 DropdownItemInterface 的选项?

interface DropdownItemInterface  { // ???
  value: string;
  name: string;
}

最佳实践是什么,或者有最佳实践吗?

1 个答案:

答案 0 :(得分:3)

惯例是只使用类名作为类型。与大多数(但不是全部)具有类的语言一样,该类定义实现接口。您可以 定义一个单独的接口,但这不是必需的,并且标准做法不是这样做的。

请注意,在TypeScript中,即使它们没有通过声明的接口具有类型关系,也可以与分配兼容。例如:

class DropdownItem {
  value: string = "";
  name: string = "";
}

function example(item: DropdownItem): void {
    //...
}

const item1 = {value: "x", name: "foo"};

example(item1);  // No error here, even though `item1` is not
                 // declared of type DropdownItem

实际上,您用作DropdownItem的对象只必须具有正确类型的valuename,即使它还有其他东西:

const item2 = {value: "y", name: "bar", other: 42};

example(item2);  // No error here, it's okay that it has an
                 // extra property

Examples on the playground


如果您愿意决定使用单独的界面,我认为没有任何一种标准的命名方式。我在TypeScript中看到的大多数接口只是以常规方式命名的,没有任何特定的指示符说明它们是接口。在极少数情况下使用指标时,通常使用I前缀,例如IDropDownItem,但我怀疑我已经在习惯于使用其他语言或(显示我的年龄)COM的人们编写的代码中看到了这一点。