扩展类型

拥有可能是其他类型的更具体版本的类型是很常见的。例如,我们可能有一个 BasicAddress 类型,它描述了在美国发送信件和包裹所需的字段。

It's pretty common to have types that might be more specific versions of other types. For example, we might have a BasicAddress type that describes the fields necessary for sending letters and packages in the U.S.

interface BasicAddress {
  name?: string;
  street: string;
  city: string;
  country: string;
  postalCode: string;
}

PVYt6LfXWorynK8d9eMaoOmWWXeb4TZywtndl8WdD1lmFpUzfNr7k3U+dji8qk4psh1Y4wmzsVYbXYhQpIX638TJnurKavP5DZPXTFthqGdplJ+ojLyfZEhf4ic3j+bDeEK2+lkPgCr8m4A46CkuQ4RS5/DFVJbp7XoGnLnwgEjV6c7V9sTADCwSyUAjAVo7gI+PrZXdabPv4316ye/USmFG7PPzt2ZtjmmaMFFaEclVuoRocwMn0XqkgjSnnK0Cnvfo70WW+5mtlOWcm0I6RUClUeIuMhsdwhPVrmUytzb24P6hwTfVfQpwTBiZPRN0JaT03PKPwB9LM9A1RMszquoXZnjiK0A0x3CF+9G0PDSQuo1aWCy1Q/N8IUZyBj5ucA0GW0/VBDqyeNdaD8AV4SMwLeNiLOsnkDI2YlvYF5ZwsxY2HKbkk7U4DvqfvbOwEtTxvBPWDjySHJ/QzJzlssiJjn1GJrNb+ZellWbCBbMQbdsBM+/rh5SsTjZ7Lflbffm2L8MMM8WIjqUYo8oICw93P62cjEPG6MraItMwHPZCtZ3vMr/y0MFSBc+DdlC2

interface AddressWithUnit {
  name?: string;
  unit: string;
//^^^^^^^^^^^^^
  street: string;
  city: string;
  country: string;
  postalCode: string;
}

8G16pJe0UW+/EDrp+a4w2QChccfH7tuJd3/asWEzssHI8kNJAdyMNnOcn8hSRsN0iTjUOACIt1Uv+oU+Ry3PJETOSIwn8Om6rlXVknznu2XtJ8OFJmD4Sldo/nN5U4cwCViU91Qr5/sa3sb5XWB+ux/K07qnLy2FUincrX4dGJo5dHdyfHnMc8SOkZ8X7NAd7p+Y6GETmCIZHsIcJN8ipNEte80JUiSr5GbnDpRdqNxL2cpv9DQ+faIOPkaWlKd1aLiirNc5ZOKIzexQTG4HGy01L1Uxo2lchx+OQfvRXnArqmhSWIkhUdZJFnWOabizg8Guk3I5RZ5GmCncuknycRr06wVhrooyPKh2aZEl4CPR8ybmBrgCcfrVcABKDOOdFZnw2dzBcJ/95HrZ02aMGMBx2ttx510fq/qmRdpeK6JwXdkxvypzKLYXTZt4JpyddIoE+tJUtRDlcD+bgahg6odO30dPKl0KmCg4bSCcG6j0yEkonTUJjVCd8RMTeop6kUqmbrOveGf0ZFm9/u5sMiQH94caDJ8XXjEQLQ8+hBkOtAR0x3dIWhyyDq7uXrS6tSm+UBs/nOdgEi9+mP/xjnjXKq8DvBdpgWHBJXWqPI9Jz0AQPBnxVd7qHy8OP8NGDY3tqYWhUHfsvzNCkF07lYyH1pb4R2M3+Af/IyCNO2Cj6kylm7A+HovMn49DkqrGLcMTjUADvh9WKEPOmBPbikJ2fFRIUzLgC8Q4R18frmGzs21lyTiwwJcsCFByRPpEYZzZcPqEDDiLz5s9UI6Xauu8vhSf6akQUcCp84jzCWxxRCeSEbCL3fOpoXCvS1BJ

interface BasicAddress {
  name?: string;
  street: string;
  city: string;
  country: string;
  postalCode: string;
}

interface AddressWithUnit extends BasicAddress {
  unit: string;
}

Lntm6OyYnvk3vbjZ/SO/DmH3SO4YL0VSgISj9buF/P52IBz7lmxK8EVUenbJv+UdgsUqnaBB75Ndpuj3+L2UxByu2owQtAAhKHQHYbcXkm8/Ypd2A2F7bpdKre7QgDDtwFrVyMV4QvfXbP2qO0Z+x300W1epYMXueO1bBSMsxg+pglcpBG2LumVh3Jpyt89UQs38HL+wnQhz9cXoklpWT2+iGinL2qhoJAnnL0HqfxmmmS+SKgY1EXzGj50BcrtzxLSIb8uvz5LEvbBos1pfetAH1vZ3VNopvS8VaCY2ORrpgx1oeTdJGNBneK8u9qwA17ziy5h3UhohkL/aCU123GaisZlz/lHNpH3ZAM++Pb5oGGEbAcFJX2JjkV0GetzuVbH7ZNAjpSTF05uOXF7EBewVFzwtL1M4qiZdVp5jgpUH05E1pXjGQSVnGg+BGHbxX1/SGcYdxn5daBLUdeWHXUDMoIBnHY55zB8hhA6xYk1yJpX1eolz73UasEipZh3uf5/I9BQuhhLKKQ5esCIwhJNfjhzUMkcqZu/11JVeHnjupGKwj54gYYoD1QOPkZhWSgbUSyxtiF4vvev9KcdoJ3V+l+UuDddA8qSFu9f5RzVTAh2Ew3jCAGt/MKJ4kYT3haCffx5ixf7Gi/DF3LjAYaRpBYV3CDmsDOPqmippD28QagJQB8G/96/5zAX+i0aT0UGkl/9uaUQxv2CwWO6P6YXsHq0tgAMjKPR9obAMFXBoVD4yqoMNhA1fA6GRzS4XxRmnncwY/PcR6o1hRpttgu3pSnYqL+Ms4TUZmK7pgbfSQ4Z0ejqu8fqG/J/MsL8ahDcqCpevH38EadAAen6K3+4g2Jc32Xn7NQu/Tf93rAD8OteCQz+A49WtO61Q0BuqPc7JoC5m9+OG1nQfLpM2Yh78FsRPjkFInvrnj/LQHxoLdHYIPNLsBanr1xcNbarMyVCqLv3IcNyw/NxBFqGT+bVMziX5z8N0F169249hFcoq2COIwyY7cYTBo5/6VqWYVHLkrxid+pjR2AIXOMb3POFcyjM70eZ+M32I651vpmZ8slPeNkOgEpGnGy2bRYQZK2PjrOsevp53iVifSFWFpGannaR6ExSortbSnAoggsIJqmHNRSkDEmn7ngwfGbOB7Iyrfhw9lfvZJmfEkqGbpIhYcvCESavG8ivkcpn+AOGA+y2N+DL/2oBQESDEp4wqxVfS6JrEfO70hiKh0d2Z9VmXXA+8Pq63zky1X2EFI9xaXvsWNkBLIQ8KGNYBXjCobb0/mBC6h1llFEO6dqjEFw85WA53OiAupezmWno+EM8oRH27+Wwbuu90+Vi/3Dhy97xPBIGJOD1Tl4Ea6++iZGJUfJLiiIH8xI449ebT6hCOBS6+50Vdp6iYVsyDoBph/EWqXAQht1zQpIx9bb2Y4BfyQYuF4jvnRYKZd81iJI92ZCU9eXsigPozc0WIDHognS654u4+hxk7PstBRKFTnnPAIABaBrEn/gg8o+jtiE4=

Lntm6OyYnvk3vbjZ/SO/DvmyDBHKmI9iYczOB13PB/R2yLNLN8gqDbiDjb0WKdpGwBrR6HONZoHVV7pdQOxPAbx0J5Sb9swD15w0jrOa3rGENynPl75vrPw5oMDDHS+cPOPNPqK9oQt3fFQUpC81h4NeH22qyIffHVNqYJfcJM/dCpvTqUFG303cP+bMKNSV

interface Colorful {
  color: string;
}

interface Circle {
  radius: number;
}

interface ColorfulCircle extends Colorful, Circle {}

const cc: ColorfulCircle = {
  color: "red",
  radius: 42,
};