weijar

Typescript 能否达成这个效果?

  •  
  •   weijar · Jan 11, 2021 · 2858 views
    This topic created in 1952 days ago, the information mentioned may be changed or developed.
    class Model {
        setProps (props: any) { // 这里的 any 要改成限制类的属性
          Object.assign(this, props)
        }
    }
    
    class User extends Model {
        id!: string
        name!: string
    }
    
    const user = new User()
    user.setProps({ name: 'Jack', age: 100 }) // 这里 age 不是 User 的属性,能否有办法报错?
    
    8 replies    2021-01-12 08:58:40 +08:00
    Vegetable
        1
    Vegetable  
       Jan 11, 2021
    class User extends Model {
    id!: string
    name!: string
    setProps(props: { name: string, id: string }) {
    super.setProps(props)
    }

    }
    weijar
        2
    weijar  
    OP
       Jan 11, 2021
    算了,自己找到答案了
    seProps<T> (this: T, data: Partial<Exclude<T, 'id'>>)

    ts 真是太 nb 了
    weijar
        3
    weijar  
    OP
       Jan 11, 2021
    @Vegetable 你这个不通用啊
    Vegetable
        4
    Vegetable  
       Jan 11, 2021
    @weijar 是挺牛逼...
    weijar
        5
    weijar  
    OP
       Jan 11, 2021
    卧槽,有新问题了,这招在 constructor 不好使?怎么办?
    new User({ age: 100 }) // 如果 setProps 要改成在构造器中传入
    SilencerL
        6
    SilencerL  
       Jan 11, 2021
    class Model {
    setProps?<T>(props: T) {
    Object.assign(this, props)
    }
    }
    weijar
        7
    weijar  
    OP
       Jan 11, 2021
    结贴: 在构造器上目前是不可能实现的
    https://github.com/microsoft/TypeScript/issues/40451
    meepo3927
        8
    meepo3927  
       Jan 12, 2021
    连续自问自答, 楼主学习能力超群
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5630 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 03:51 · PVG 11:51 · LAX 20:51 · JFK 23:51
    ♥ Do have faith in what you're doing.