用于检查未定义和NULL类属性的TSLint规则

时间:2019-05-25 10:35:16

标签: typescript tslint

在Web应用程序中,当我定义一个必须包含某种数据类型的类属性时,我总是指定此数据类型。但是应用程序异步获取数据,因此实际上该属性具有未定义的值,然后具有实际数据:

import numpy as np
import tensorflow as tf
import tensorflow.contrib.eager as tfe
from keras.models import Sequential
from keras.layers import Dense, Activation
from tensorflow.train import AdamOptimizer

tf.enable_eager_execution()

class MLP(tf.keras.Model):
    def __init__(self, in_dim, out_dim, hidden_dim, num_layers, activation):
        super(MLP, self).__init__()
        model = Sequential()
        in_features = in_dim
        for layer in range(num_layers):
            model.add(Dense(hidden_dim,))
            model.add(Activation(activation))
            in_features = hidden_dim
        model.add(Dense(out_dim, input_shape=(hidden_dim,)))
        self.model = model

    def call(self, inputs):
        return self.model(inputs)

model = MLP(10, 1, 20, 4, 'relu')

optim = AdamOptimizer(learning_rate=1e-4)

for v in model.variables:
    print(v)

z = tf.convert_to_tensor(np.random.randn(100, 10), dtype=tf.float32)
with tfe.GradientTape() as tape:
    tape.watch(z)
    u = model(z)
    loss = tf.reduce_mean(tf.abs(u))
grad = tape.gradient(loss, model.trainable_variables)
optim.apply_gradients(zip(grad, model.trainable_variables))
print(loss.numpy())

我认为class SomeClass { a: ISomeData; constructor() { getDataAsync().then((res: ISomeData) => this.a = res); } } 是错误的。它必须是a: ISomeData。 (如果a: ISomeData | undefined是在构造函数中同步设置的,那将是正确的) 是否有tslint规则来检查类属性是否没有数据并且必须具有未定义的类型?

1 个答案:

答案 0 :(得分:1)

默认情况下,您分配的任何类型都可以采用undefined和null值以及所做的任何类型声明。

在TypeScript配置文件(%中,您可以将tsconfig.json编译器选项设置为true。

StrictNullChecks

摘自Compiler Options上的TypeScript文档:

  

在严格的null检查模式下,null和undefined值不在每种类型的域中,只能分配给它们自己和任何值(一个例外是undefined也可以分配给void)。

这样做时,类型为{ "compilerOptions": { "strictNullChecks": true } } 的变量只能包含该类型。

如果要使用未定义/空值,则必须输入

ISomeData