2013-09-20 5 views
9

Есть ли способ указать необязательные члены типа в классах TypScript?Необязательные члены класса в Typcript

То есть, что-то вроде ...

class Foo { 
    a?: string; 
    b?: string; 
    c: number; 
} 

.... 

foo = new Foo(); 
... 
if (foo.a !== undefined) { ... (access foo.a in a type-safe string manner) ... } 

В случае, если вы знакомы с OCaml/F #, я ищу что-то вроде 'вариант строки'.

ответ

8

Следующая просто работает:

class Foo { 
    a: string; 
    b: string; 
    c: number; 
} 

var foo = new Foo(); 
foo.a = "asdf"; 
foo.b = "nada"; 

if (foo.c == undefined){ 
    console.log('c not defined'); 
} 

Вы даже можете инициализировать на создание:

class Foo { 
    a: string = 'asdf'; 
    b: string = 'nada'; 
    c: number; 
} 

var foo = new Foo(); 

if (foo.c == undefined){ 
    console.log('c not defined'); 
} 

Одна вещь, чтобы отметить, что типы машинопись удаляются из сгенерированного JavaScript. Поэтому, если вы ищете что-то вроде типа F # option, вам понадобится поддержка библиотеки времени выполнения, которая выходит за рамки TypeScript.

+3

Есть ли способ, чтобы избежать дополнительных свойств определяется на всех? ('{a: 'asdf', b: 'nada'}' вместо '{a: 'asdf', b: 'nada', c: undefined}' – Aides

+0

Также я получаю 'Поставляемые символы не соответствуют какой-либо подписи call target' на игровой площадке TypeScript и в VS [см. детскую площадку] (https://www.typescriptlang.org/play/#src=class%20Test%20%7B%0D%0A%20%20%20%20constructor (a % 3A% 20string% 2C% 20b% 3A% 20string% 2C% 20с% 3A% 20string)% 0D% 0A% 09% 7B% 0D% 0A% 09% 09% 0D% 0A% 09% 7D% 0D% 0A% 7D% 0D% 0A% 0D% 0Avar% 20Test% 20% 3D% 20new% 20Test ('Foo' % 2C% 20'bar ')% 3B) – Aides

6

В некоторых случаях использования вы можете сделать это с Parameter properties:

class Test { 
    constructor(public a: string, public b: string, public c?: string) 
    { 
    } 
} 

var test = new Test('foo', 'bar'); 

playground

Смежные вопросы