Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error Message: "An interface can only extend an object type or intersection of object types with statically known members"

Tags:

typescript

The following code:

export type Partial2DPoint = { x: number } | { y: number } export interface Partial3DPoint extends Partial2DPoint {   z: number } 

Fails with the following error:

An interface can only extend an object type or intersection of object types with statically known members.

Why is this happening?

like image 625
chibicode Avatar asked May 10 '19 21:05

chibicode


1 Answers

Types vs Interfaces differ in the ability to extend union types

(I'm answering my own question) This is because you cannot extend a union type using an interface. You must use type alias:

export type Partial2DPoint = { x: number } | { y: number } export type Partial3DPoint = Partial2DPoint & { z: number } 

See this answer:

A class can implement an interface or type alias, both in the same exact way. Note however that a class and interface are considered static blueprints. Therefore, they can not implement / extend a type alias that names a union type.

like image 143
chibicode Avatar answered Sep 23 '22 19:09

chibicode