TypeScript getter/setter 命名规范

6

我来自Java背景,习惯于在我的Typescript / Angular组件类中使用getter / setter命名约定。

getFoo()

setFoo()

然而,看来这可能不是最佳实践,而我应该使用约定。
get foo()

set foo()

问题

  • 这只是纯粹的装饰吗?有什么好处吗?我不明白为什么会受欢迎,因为据我了解,它与其他方法使用的命名约定不一致。
  • 是否有正式的样式指南建议此做法?

它们不是一样的。getFoo只是一个普通函数。在get foo中,get是getter的保留关键字。https://www.typescriptlang.org/docs/handbook/classes.html - Roberto Zvjerković
2个回答

1
我们可以在访问某个值时实现一些约束,使用getset
来自 TypeScript 文档:

TypeScript 支持 getter 和 setter 作为拦截对象成员访问的方式。这样可以更细粒度地控制每个对象上成员的访问方式。

例子:
class StudentMark {
    isPass: boolean;
    _mark: Mark;
    set mark(value: Mark) {
        if (value.subject1 > 35 && value.subject2 > 35&& value.subject3 > 35) { 
             this.isPass = true;
        } else {
             this.isPass = false;
        }
        this._mark = value;
    }
   get mark(): Mark {
       return this._mark;
   }
}

在这里,每当我们设置标记时,通行证将被更新。不需要单独更新它。在这种情况下,get和set将非常有用。

get和set的后缀应该具有相同的名称。我们只需调用名称本身即可访问它。例如,上面代码中的mark

有关get、set的更多信息,请访问typescript documentation


这段代码无法通过 TypeScript 的严格编译模式;_mark: Mark 应该改为 _mark?: Mark,并且 get mark() 应该在返回之前检查 _mark 是否已设置,或者声明为 : Mark | undefined - amphetamachine

1

type-script是java-script的超集,所有的语言语法都非常类似于ECMAScript标准,因为程序员在编写java-script应用程序时感觉更好。

在TS和JS上设置、获取属性非常相似

JS

class JSExample {
    constructor() {
        this._val = "V";
    }
    get val() {
        return this._val;
    }
    set val($v) {
        this._val = $v;
    }
}

TS

class TSExample {
    _val = "V";

    get val(): string {
        return this._val;
    }
    set val($v: string) {
        this._val = $v;
    }
}

你好。为什么要在变量名前使用美元符号$?根据Google TypeScript风格指南中的Getter和Setter(访问器)部分,它是不必要的。 指南中的引用:Google Guide </br> set someMember(newValue: string) { ... } - Alexey Ryzhkov
1
在JavaScript中,$字符与其他标准命名约定字符类似,并不特殊。但是当我们使用set属性时,JS语言会将一个值分配给setter,因此我认为它使用了$字符。使用样式指南不应限制您的思维,因为编程语言并不受任何限制。 - Moslem Shahsavan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接