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
  • 相关阅读:
    Centos 配置网易YUM源
    JDK 变量配置
    redis如何解决key冲突?
    大数据技术(1)流式计算与Storm
    20151211小问题
    返回顶部
    20151210小问题2
    20151210小问题
    20151209小问题
    前端程序员的自我修养
  • 原文地址:https://www.cnblogs.com/Answer1215/p/14731831.html
Copyright © 2011-2022 走看看