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
  • 相关阅读:
    Jenkins安装后,安装插件失败。报错SunCertPathBuilderException
    计算机网络
    abaqus
    品优购
    html5 css3
    css定位
    元素的显示与隐藏 / 精灵图
    学成在线案例
    css(3)
    css(2)
  • 原文地址:https://www.cnblogs.com/Answer1215/p/14731831.html
Copyright © 2011-2022 走看看