function assertDeclareIcuTemplateParametersAreValid(templateString, options) {
  // This check exists to alert developers to possible problems with their
  // `declareIcuTemplate()` message calls during uncompiled execution.
  // During compilation closure-compiler will perform these same checks and
  // replace all calls to `declareIcuTemplate()` with string literals.
  if (COMPILED) return;

  assertNoClosureStylePlaceholdersInIcuTemplate(templateString);
  const icuPlaceholderNames = gatherIcuPlaceholderNames(templateString);

  const description = options.description;
  assert(description, 'no description supplied');
  assert(
      typeof description == 'string', 'invalid description: "%s"', description);

  const meaning = options.meaning;
  assert(
      !meaning || typeof meaning == 'string', 'invalid meaning: "%s"', meaning);

  const exampleMap = options.example;
  if (exampleMap) {
    assert(
        typeof exampleMap == 'object', 'invalid example map: "%s"', exampleMap);
    assertValidPlaceholderMap('example', exampleMap, icuPlaceholderNames);
  }

  const originalCodeMap = options.original_code;
  if (originalCodeMap) {
    assert(
        typeof originalCodeMap == 'object', 'invalid original_code map: "%s"',
        originalCodeMap);
    assertValidPlaceholderMap(
        'original_code', originalCodeMap, icuPlaceholderNames);
  }

  for (const propName of Object.keys(options)) {
    assert(VALID_OPTIONS.has(propName), 'unknown option name: "%s"', propName);
  }
}
Throw an exception if the parameters are not valid for a `declareIcuTemplate`
function call.

@param {string} templateString
@param {!IcuTemplateOptions} options