Skip to content
Go back

typescript中的interface&type

Published:

interface是真正的类型,type只是类型别名

inteface 遇到属性冲突会报错, type只会合并,遇到属性冲突会变成never类型

所以导致interface会”惰性求值”,而type会直接展开

type Wrapped = { value: T }; type Comparable = number | Wrapped; // ^^^^^^^^^^ // Type alias ‘Comparable’ circularly references itself.

typescript源码

getDeclaredTypeOfClassOrInterface

核心在这里: links.declaredType存在时,直接返回 links.declaredType

    function getDeclaredTypeOfClassOrInterface(symbol: Symbol): InterfaceType {
        let links = getSymbolLinks(symbol);
        const originalLinks = links;
        if (!links.declaredType) {
            const kind = symbol.flags & SymbolFlags.Class ? ObjectFlags.Class : ObjectFlags.Interface;
			     // ....
        }
        return links.declaredType as InterfaceType;
    }

对于type会尝试立即解析 getDeclaredTypeOfTypeAlias

image.png


Suggest Changes

Previous Post
getConditionalFlowTypeOfType浅析typescript中的变体
Next Post
typescript 条件类型