Tous les champs en JavaScript (et en TypeScript) peuvent avoir la valeur null
ou undefined
.
Vous pouvez rendre le champ facultatif, différent de 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;
}
Comparer avec:
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';
}
typescript@next
maintenant.)"strict" : false
salary:number|null;
Si vous le faites,salary?:number; salary = null;
vous obtiendrez une erreur. Cependant,salary = undefined;
cela fonctionnera très bien dans ce cas. Solution: utilisez Union ie '|'Le type d'union est dans mon esprit la meilleure option dans ce cas:
EDIT: Pour que cela fonctionne comme prévu, vous devez activer l'
strictNullChecks
entsconfig
.la source
Pour ressembler davantage à C # , définissez le
Nullable
type comme ceci:Prime:
Pour vous
Nullable
comporter comme un type Typescript intégré, définissez-le dans unglobal.d.ts
fichier de définition dans le dossier source racine. Ce chemin a fonctionné pour moi:/src/global.d.ts
la source
emp: Partial<Employee>
, nous pouvons faireemp.id
ouemp.name
etc., mais si nous avonsemp: Nullable<Employee>
, nous ne pouvons pas faireemp.id
Ajoutez simplement un point d'interrogation
?
au champ facultatif.la source
Vous pouvez simplement implémenter un type défini par l'utilisateur comme le suivant:
la source
la source
j'ai eu cette même question il y a quelque temps .. tous les types de ts sont nullables, car void est un sous-type de tous les types (contrairement, par exemple, scala).
voir si cet organigramme aide - https://github.com/bcherny/language-types-comparison#typescript
la source
void
être «sous-type de tous les types» ( type inférieur ), reportez-vous à ce fil . Le tableau que vous avez fourni pour scala est également incorrect.Nothing
en scala est, en fait, le type inférieur. Tapuscrit, atm, ne pas avoir le type de fond tout scala fait .Un type nul peut invoquer une erreur d'exécution. Je pense donc qu'il est bon d'utiliser une option de compilation
--strictNullChecks
et de déclarernumber | null
comme type. également en cas de fonction imbriquée, bien que le type d'entrée soit nul, le compilateur ne peut pas savoir ce qu'il pourrait casser, donc je recommande l'utilisation!
(marque d'exclamination).Référence. https://www.typescriptlang.org/docs/handbook/advanced-types.html#type-guards-and-type-assertions
la source