zoukankan      html  css  js  c++  java
  • [Typescript] Prevent Type Widening of Object Literals with TypeScript's const Assertions

    const assertion is a special type assertion that uses the const keyword instead of a specific type name. When using a const assertion on an object literal expression, all properties will become readonly properties and no literal types within the expression will be widened.

    const ORIGIN = {
        x: 0,
        y: 0
    }
    
    // works
    ORIGIN.x = 1

    If you don't want user able to change it:

    const ORIGIN: {
        readonly x: number,
        readonly y: number
    } = {
        x: 0,
        y: 0
    }
    // Typescript complian
    // Cannot assign to 'x' because it is a read-only property.
    ORIGIN.x = 1

    Better way:

    const ORIGIN = {
        x: 0,
        y: 0
    } as const
    // Typescript complian
    // Cannot assign to 'x' because it is a read-only property.
    ORIGIN.x = 1

    But `as const` doesn't enforce in runtime. If we do want to prevent mutate the object, we can do:

    const ORIGIN = Object.freeze({
        x: 0,
        y: 0
    } as const)
    // Typescript complian
    // Cannot assign to 'x' because it is a read-only property.
    ORIGIN.x = 1
  • 相关阅读:
    less css用法思维导图
    javascript模块化编程规范
    行高:line-height图文解析
    CSS细节
    Emmet
    常见的浏览器兼容问题
    一条在没有水的环境下坚持了四年生存下来的鱼
    纪念:一高那些年
    水墨青花
    float浮动
  • 原文地址:https://www.cnblogs.com/Answer1215/p/14731831.html
Copyright © 2011-2022 走看看