diff --git a/packages/@aws-cdk/core/lib/cfn-parameter.ts b/packages/@aws-cdk/core/lib/cfn-parameter.ts index 6226f451c2fb8..c9f219d17ae72 100644 --- a/packages/@aws-cdk/core/lib/cfn-parameter.ts +++ b/packages/@aws-cdk/core/lib/cfn-parameter.ts @@ -289,8 +289,8 @@ export class CfnParameter extends CfnElement { * The parameter value, if it represents a string. */ public get valueAsString(): string { - if (!isStringType(this.type)) { - throw new Error(`Parameter type (${this.type}) is not a string type`); + if (!isStringType(this.type) && !isNumberType(this.type)) { + throw new Error(`Parameter type (${this.type}) is not a string or number type`); } return Token.asString(this.value); } diff --git a/packages/@aws-cdk/core/test/test.cfn-parameter.ts b/packages/@aws-cdk/core/test/test.cfn-parameter.ts new file mode 100644 index 0000000000000..a370b3948d401 --- /dev/null +++ b/packages/@aws-cdk/core/test/test.cfn-parameter.ts @@ -0,0 +1,32 @@ +import { Test } from 'nodeunit'; +import { CfnParameter, Stack } from '../lib'; + +export = { + 'valueAsString supports both string and number types'(test: Test) { + // GIVEN + const stack = new Stack(); + const numberParam = new CfnParameter(stack, 'numberParam', { type: 'Number', default: 10 }); + const stringParam = new CfnParameter(stack, 'stringParam', { type: 'String', default: 'a-default' }); + + // WHEN + const numVal = numberParam.valueAsString; + const strVal = stringParam.valueAsString; + + // THEN + test.deepEqual(stack.resolve(numVal), { Ref: 'numberParam' }); + test.deepEqual(stack.resolve(strVal), { Ref: 'stringParam' }); + + test.done(); + }, + + 'valueAsString fails for unsupported types'(test: Test) { + // GIVEN + const stack = new Stack(); + const listParam = new CfnParameter(stack, 'listParam', { type: 'List', default: 10 }); + + // WHEN - THEN + test.throws(() => listParam.valueAsList, /Parameter type \(List\)/); + + test.done(); + }, +} \ No newline at end of file