【问题标题】:Setting properties from one interface in another with inheritance通过继承在另一个接口中设置属性
【发布时间】:2016-10-11 17:43:59
【问题描述】:

是否可以通过生成第一个接口继承自另一个接口的实例来设置一个接口的属性?

例如,我有一个user 接口,其中包含一个生成随机实例的函数。

import * as Chance from 'chance';

export interface User {
    username: string;
    firstName: string;
    lastName: string;
    password: string;
    email: string;
    gender: string;
    streetAddress: string;
    city: string;
    state: string;
    zipCode: string;
    country: string;
    phoneNumber: string;
}

export function generateRandomUser(): User {
    let randomuser: User;

    randomuser.firstName = Chance.first();
    randomuser.lastName = Chance.last();
    randomuser.username = randomuser.firstName + randomuser.lastName;
    randomuser.password = 'password';

    return randomuser;
}

然后我有一个更具体的用户界面,假设它是ProUser,它有另一个生成功能

import { User, generateRandomUser } from '../user';
import * as Chance from 'chance';

interface ProUser extends User {
    favoriteColor: string;
}

function generateRandomProUser(): ProUser {
    let generalUser = generateRandomUser();
    let randomProUser: ProUser;

    // simple way to set the props from generalUser to randomProUser??

    randomProUser.favoriteColor = Chance.color();

    return randomProUser;
}

有没有一种简单的方法来映射这些属性?我还有其他用户类型也可以使用此映射功能。

【问题讨论】:

    标签: inheritance typescript interface


    【解决方案1】:

    你可以这样做:

    function generateRandomProUser(): ProUser {
        let randomProUser = generateRandomUser() as ProUser;
        randomProUser.favoriteColor = Chance.color();
    
        return randomProUser;
    }
    

    另一种选择是使用Object.assign

    function generateRandomProUser(): ProUser {
        let generalUser = generateRandomUser();
        let randomProUser = Object.assign({}, generalUser) as ProUser;
    
        randomProUser.favoriteColor = Chance.color();
    
        return randomProUser;
    }
    

    【讨论】:

    • 完美。我知道有什么东西,但不知道该去哪里找。谢谢。
    猜你喜欢
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    相关资源
    最近更新 更多