Typescript 类型脚本联合类型和接口

Typescript 类型脚本联合类型和接口,typescript,interface,Typescript,Interface,我是打字新手, 我不明白为什么在调用数组或函数属性时接口不在对象中声明。 若我从任何对象调用它,那个么数组或函数属性就会出错 在这里,我使用address属性作为字符串,然后在makeNewEmployee对象中声明接口,这样就没有错误了。 我对此有点困惑 这是我的密码 interface makeAnything{ user:string; address:string| string[]| (()=>string); } /// address as string l

我是打字新手, 我不明白为什么在调用数组或函数属性时接口不在对象中声明。 若我从任何对象调用它,那个么数组或函数属性就会出错

在这里,我使用address属性作为字符串,然后在makeNewEmployee对象中声明接口,这样就没有错误了。 我对此有点困惑

这是我的密码

interface makeAnything{
    user:string;
    address:string| string[]| (()=>string);
}

/// address as string
let makeNewEmployee:makeAnything = {
    user:"Mirajehossain",
    address:"Dhaka,Bangladesh" 
};
console.log(makeNewEmployee.address); 
在这里,我在makeNewEmployee对象中使用makeAnything接口,并将address属性声明为函数,为什么在控制台中出现错误

    ///address as function
let makeSingleEmployee:makeAnything = {
    user:'Miraje hossain',
    address:():any=>{
        return{
            addr:"road 4,house 3",
            phone:18406277
        }
    }
};
console.log(makeSingleEmployee.address()); ///getting error

您可以使用类型保护来帮助编译器知道
address
是一个函数。看

示例:

// string or string[] cannot be instances of Function. So the compiler infers that `address` must be (()=>string)
if (makeSingleEmployee.address instanceof Function) {
    console.log(makeSingleEmployee.address());     
}

// typeof makeSingleEmployee.address will be "function" when address is a function
if (typeof makeSingleEmployee.address != "string"  && typeof makeSingleEmployee.address != "object" ) {
    console.log(makeSingleEmployee.address()); 
}
或者,如果您确信
地址
是一个函数,则可以将其强制转换为
任何

console.log((makeSingleEmployee as any).address());