私はTypeScriptにインターフェイスを持っています。TypeScriptで型をnullableとして宣言するにはどうすればいいですか?
interface Employee{
id: number;
name: string;
salary: number;
}
私は(我々はC#で行うことができますように)NULL可能フィールドとして「給与」をしたいと思います。これはTypeScriptで可能ですか?
私はTypeScriptにインターフェイスを持っています。TypeScriptで型をnullableとして宣言するにはどうすればいいですか?
interface Employee{
id: number;
name: string;
salary: number;
}
私は(我々はC#で行うことができますように)NULL可能フィールドとして「給与」をしたいと思います。これはTypeScriptで可能ですか?
のJavaScript(および活字体で)のすべてのフィールドが値null
またはundefined
を持つことができます。
フィールドは、オプションでとすることができます。これは、nullableとは異なります。
interface Employee1 {
name: string;
salary: number;
}
var a: Employee1 = { name: 'Bob', salary: 40000 }; // OK
var b: Employee1 = { name: 'Bob' }; // Not OK, you must have 'salary'
var c: Employee1 = { name: 'Bob', salary: undefined }; // OK
var d: Employee1 = { name: null, salary: undefined }; // OK
// OK
class SomeEmployeeA implements Employee1 {
public name = 'Bob';
public salary = 40000;
}
// Not OK: Must have 'salary'
class SomeEmployeeB implements Employee1 {
public name: string;
}
は、と比較する:私はしばらく前にこの同じ質問があった
interface Employee2 {
name: string;
salary?: number;
}
var a: Employee2 = { name: 'Bob', salary: 40000 }; // OK
var b: Employee2 = { name: 'Bob' }; // OK
var c: Employee2 = { name: 'Bob', salary: undefined }; // OK
var d: Employee2 = { name: null, salary: 'bob' }; // Not OK, salary must be a number
// OK, but doesn't make too much sense
class SomeEmployeeA implements Employee2 {
public name = 'Bob';
}
[厳密にnullable型と厳密なヌルチェック](https://github.com/Microsoft/TypeScript/pull/7140)が実装されており、Typescript 2.0で到着します! (今は 'typescript @ next') –
オプションフィールドに疑問符?
を追加するだけです。
interface Employee{
id: number;
name: string;
salary?: number;
}
Ryanが指摘したように...? typescriptではオプションであり、nullではありません。 なし? varがnullまたはundefinedを含む値に設定されなければならないことを意味します。 ?あなたは宣言全体をスキップすることができます。 –
ボイドは、すべてのタイプのサブタイプがあるので.. TS内のすべての種類は、NULL可能です(とは異なり、例えば、スカラ) 。
このフローチャートができますかどうかを確認 - https://github.com/bcherny/language-types-comparison#typescript
-1:これはまったく真実ではありません。 「すべてのタイプのサブタイプ」([ボトムタイプ](https://en.wikipedia.org/wiki/Bottom_type))である「void」については、[this thread](https://github.com/Microsoft/TypeScript/issues/3076)。また、あなたがスカラーのために提供したチャートも間違っています。スカラの「何もない」というのは、実際にはボトムタイプです。 Typescript、atm、**はボトムタイプではありません**はスカラ**です**。 –
"すべてのタイプのサブタイプ"!=ボトムタイプ。 TS仕様を参照してくださいhttps://github.com/Microsoft/TypeScript/blob/master/doc/spec.md#327-theundundined-type – bcherny
ユニオンタイプは、この場合、私の心の最良の選択肢である:
interface Employee{
id: number;
name: string;
salary: number | null;
}
// Both cases are valid
let employe1: Employee = { id: 1, name: 'John', salary: 100 };
let employe2: Employee = { id: 1, name: 'John', salary: null };
--strictNullChecksを使用する場合(これは必須です)、これはaです。有効なソリューション。オプションのメンバのためには使用しません。なぜなら、すべてのリテラルオブジェクトに明示的なnullを追加する必要があるからです。しかし、関数の戻り値については、それは方法です。 – geon
'給与?:数;いいえ、それは本当ではない' –
。 –
"給料は?:番号;"間違っている、つまり、給料はオプションでC#のようなものではないことを意味するNullable – squadwuschel